如何根据文件中的行号提取特定行

问题描述 投票:0回答:2

我正在研究一个由大约 24000 行(基因)和 1100 列(样本)组成的 RNA-Seq 数据集,该数据集以制表符分隔。为了进行分析,我需要选择一个特定的基因集。如果有一种根据行号提取行的方法会非常有帮助吗?对我来说,这样比用基因名称更容易。

以下是数据示例 (4X4) -

gene    Sample1    Sample2    Sample3
A1BG     5658    5897      6064
AURKA    3656    3484      3415
AURKB    9479    10542    9895

例如,我想要第 1、3 和 4 行,没有特定的模式。正如下面评论中所解释的,我还想提取一个范围内的行。

我也在 biostars.org 上询问过。

shell extract file-handling
2个回答
2
投票

您可以使用 for 循环来构建

sed
选项,如下所示

var=-n
for i in 1 3,4 # Put your space separated ranges here
do
 var="${var} -e ${i}p"
done
sed $var filename

注意:在任何情况下,这里提到的要求仍然会很痛苦,因为它涉及太多的打字。


1
投票

假设您有一个文件或一个生成所需行号列表的程序,您可以使用

sed
对其进行编辑,使其成为打印这些行并将其传递给
sed
的第二次调用的脚本.

具体而言,假设您有一个名为

lines
的文件,其中说明了您想要的行(或者它同样可以是在其
stdout
上生成行的程序):

1
3
4

您可以将其制作成

sed
脚本,如下所示:

sed 's/$/p/' lines
1p
3p
4p

现在您可以将其传递给另一个

sed
作为要执行的命令:

sed -n -f <(sed 's/$/p/' lines) FileYouWantLinesFrom

这样做的优点是独立于可以传递给脚本的参数的最大长度,因为

sed
命令位于伪文件中,即不作为参数传递。


如果您不喜欢/使用

bash
过程替换,您可以这样做:

sed 's/$/p/' lines | sed -n -f /dev/stdin FileYouWantLinesFrom
© www.soinside.com 2019 - 2024. All rights reserved.