我有一个包含很多列的数据文件。它是从具有相同格式的文件生成的。标题是这样的:
gene strand coord exression SRR1234 gene strand coord exression SRR1235 gene strand coord exression SRR1236
我希望提取"基因"和#34; SRR *"在shell中。
有没有人有这方面的经验?
答案 0 :(得分:0)
cols=$(head -n 1 datafilename | sed -e "s/\s\+/\n/g" | nl -w1 | grep 'SRR*\|gene' | cut -f 1)
cut -f"${cols//$'\n'/,}" datafilename
首先,我们仅使用head
读取第一行,然后使用sed
将空格(在这种情况下为制表符)更改为换行符,然后在其旁边打印出带有数字的列与nl
。看起来像这样:
1 gene
2 strand
...
此后,我们仅通过grep
显示包含您要关注的项目的行,然后仅保留cut
的第一个字段,只剩下前面的数字。我们想要的列的列名。现在我们有了一个关心的换行符分隔的数字列表,因此我们使用参数扩展进行替换,将其更改为逗号分隔的数字列表,然后将其传递给cut
以仅显示那些列。 / p>