我正在研究一个由大约 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 上询问过。
您可以使用 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
命令位于伪文件中,即不作为参数传递。
如果您不喜欢/使用
bash
和过程替换,您可以这样做:
sed 's/$/p/' lines | sed -n -f /dev/stdin FileYouWantLinesFrom