select列在列标题中具有相同的字符串

时间:2018-06-19 08:46:14

标签: shell

我有一个包含很多列的数据文件。它是从具有相同格式的文件生成的。标题是这样的:

gene    strand  coord   exression   SRR1234 gene    strand  coord   exression   SRR1235 gene    strand  coord   exression   SRR1236

我希望提取"基因"和#34; SRR *"在shell中。

有没有人有这方面的经验?

1 个答案:

答案 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>