使用AWK

时间:2019-08-15 16:36:31

标签: awk

我正在尝试使用AWK删除第二列中第二个下划线之后的字符串。

这是我的输入数据:

OTU10015    uncultured_Ascomycota_C31_F02_Lineage=Root  Fungi
OTU10071    Fusarium_sp._NRRL_52720_Lineage=Root    Fungi
OTU10082    Colletotrichum_dematium_BBA_62147_Lineage=Root  Fungi

预期输出为:

OTU10015    uncultured_Ascomycota   Fungi
OTU10071    Fusarium_sp.    Fungi
OTU10082    Colletotrichum_dematium   Fungi

我尝试了以下代码:

awk '{sub(/([^_]).*/,"",$2);print $1,$2,$3}' file1> file2

我从另一篇文章中找到了此代码,并试图对其进行修改, 但是它将删除整个第二列。

如何进一步修改代码?提前致谢!

1 个答案:

答案 0 :(得分:3)

sub()之类的函数可以轻松解决问题时,将split()用作基于正则表达式的方法似乎是错误的方法。

您只需要使用split()函数在_上拆分即可,并且仅使用前两个单词。在不影响文件中其余字段的情况下,这是最小的。

awk '{ split($2, arr, "_"); $2=arr[1]"_"arr[2] }1' file

仅修改一条记录时,几乎不需要使用print手动打印字段。进行{ .. }1会基于基于行中任何字段的修改来重新构建整行。通过仅修改$2,整行都通过修改而重建。