我正在尝试使用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
我从另一篇文章中找到了此代码,并试图对其进行修改, 但是它将删除整个第二列。
如何进一步修改代码?提前致谢!
答案 0 :(得分:3)
当sub()
之类的函数可以轻松解决问题时,将split()
用作基于正则表达式的方法似乎是错误的方法。
您只需要使用split()
函数在_
上拆分即可,并且仅使用前两个单词。在不影响文件中其余字段的情况下,这是最小的。
awk '{ split($2, arr, "_"); $2=arr[1]"_"arr[2] }1' file
仅修改一条记录时,几乎不需要使用print
手动打印字段。进行{ .. }1
会基于基于行中任何字段的修改来重新构建整行。通过仅修改$2
,整行都通过修改而重建。