在所有列上仅使用awk来获取部分列内容

时间:2018-08-15 16:29:14

标签: unix awk grep

我试图找到以下解决方案。我在第一列中列出了基因ID,在所有其他列中都列出了相关的GO术语。因此,每个基因ID后面的列数是可变的。如下几行:

TRINITY_DN173118_c0_g1  GO:0000139^cellular_component^Golgi membrane
TRINITY_DN49436_c2_g1   GO:0006351^biological_process^transcription, DNA-templated
TRINITY_DN47442_c0_g1   GO:0003677^molecular_function^DNA binding   GO:0006302^biological_process^double-strand break repair    GO:0006310^biological_process^DNA recombination

GO术语用制表符分隔。我想保留第一列,其中包含ID和所有包含“ biological_process”的列。但是我该如何使用awk进行操作,而没有要搜索的特定列。

我基本上想对列使用grep,因此尝试使用awk进行操作(但是我完全没有awk的经验):

awk '/biological_process/'->我得到了整行 awk '{ print "biological_process" }'->我只会经历生物学过程

有人可以帮我吗?谢谢!

2 个答案:

答案 0 :(得分:2)

AWK:

awk -F"GO:" '{printf "%s",$1}{for(i=2;i<=NF;i++) if ($i~/biological_process/)printf FS"%s",$i ;print ""}' file

1)-F"GO:"-使用“ GO:”字符串作为分隔符

2){printf "%s",$1}-打印第一列(没有新行)

3)for(i=2;i<=NF;i++)-在第一个列旁边的所有列上运行

4)($i~/biological_process/)-检查字符串是否存在于列中

5)printf FS"%s",$i-如果列中存在字符串,则打印分隔符和字符串

6)print ""-打印新行

使用的输入文件:

  TRINITY_DN173118_c0_g1  GO:0000139^cellular_component^Golgi membrane
  TRINITY_DN49436_c2_g1   GO:0006351^biological_process^transcription, DNA-templated 
  TRINITY_DN47442_c0_g1   GO:0003677^molecular_function^DNA binding GO:0006302^biological_process^double-strand break repair GO:0006310^biological_process^DNA recombination

输出

   TRINITY_DN173118_c0_g1  
   TRINITY_DN49436_c2_g1   GO:0006351^biological_process^transcription, DNA-templated
   TRINITY_DN47442_c0_g1   GO:0006302^biological_process^double-strand break repair GO:0006310^biological_process^DNA recombination

感谢Ed Morton的反馈,我已经编辑了答案:)。

答案 1 :(得分:1)

另一个类似的awk

$ awk 'BEGIN {FS=OFS="\t"} 
             {line=$1; 
              for(i=2;i<=NF;i++) if($i~/biological_process/) line=line OFS $i; 
              print line}' file

TRINITY_DN173118_c0_g1
TRINITY_DN49436_c2_g1   GO:0006351^biological_process^transcription, DNA-templated
TRINITY_DN47442_c0_g1   GO:0006302^biological_process^double-strand break repair        GO:0006310^biological_process^DNA recombination