如何根据文件中的行号提取特定行
How to extract specific rows based on row number from a file
我正在处理一个 RNA-Seq 数据集,该数据集由大约 24000 行(基因)和 1100 列(样本)组成,以制表符分隔。对于分析,我需要选择一个特定的基因集。如果有一种方法可以根据行号提取行,那将非常有帮助?这样对我来说比使用基因名称更容易。
下面是数据的例子 (4X4) -
gene Sample1 Sample2 Sample3
A1BG 5658 5897 6064
AURKA 3656 3484 3415
AURKB 9479 10542 9895
例如,我想要第 1、3 和 4 行,没有特定的模式
我也在 biostars.org 上问过。
您可以使用 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
注意: 在任何情况下,提到的要求 仍然很痛苦,因为它涉及太多的输入。
假设您有一个文件或一个程序可以生成您想要的行号列表,您可以使用 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
命令位于伪文件中,即不作为参数传递。
如果你不like/use bash
和处理替换,你可以这样做:
sed 's/$/p/' lines | sed -n -f /dev/stdin FileYouWantLinesFrom
我正在处理一个 RNA-Seq 数据集,该数据集由大约 24000 行(基因)和 1100 列(样本)组成,以制表符分隔。对于分析,我需要选择一个特定的基因集。如果有一种方法可以根据行号提取行,那将非常有帮助?这样对我来说比使用基因名称更容易。
下面是数据的例子 (4X4) -
gene Sample1 Sample2 Sample3
A1BG 5658 5897 6064
AURKA 3656 3484 3415
AURKB 9479 10542 9895
例如,我想要第 1、3 和 4 行,没有特定的模式
我也在 biostars.org 上问过。
您可以使用 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
注意: 在任何情况下,提到的要求
假设您有一个文件或一个程序可以生成您想要的行号列表,您可以使用 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
命令位于伪文件中,即不作为参数传递。
如果你不like/use bash
和处理替换,你可以这样做:
sed 's/$/p/' lines | sed -n -f /dev/stdin FileYouWantLinesFrom