我正在研究RNA-Seq数据集,该数据集由大约24000行(基因)和1100列(样本)组成,这些数据集是制表符分隔的。为了分析,我需要选择一个特定的基因组。如果有一种方法可以根据行号提取行,那将会非常有用吗?对我而言,这比基因名称更容易。
以下是数据示例(4X4) -
基因Sample1 Sample2 Sample3
A1BG 5658 5897 6064
AURKA 3656 3484 3415
AURKB 9479 10542 9895
据此,例如,我想要第1,3和4行,没有特定的模式
我也在biostars.org问过。
答案 0 :(得分: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
注意:在任何情况下,提及here的要求仍然会很痛苦,因为它涉及太多的输入。功能
答案 1 :(得分: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