【发布时间】:2020-11-10 01:48:29
【问题描述】:
我正在尝试
- 打印前 3 列
- 找到所有带有“Eury_gr1_”的字段并将它们打印到第 4 列
- 如果整行中没有“Eury_gr1_”,则在第 4 列打印 0。
输入如下所示,名为“final_pcs_mod_test.csv”:
PC_00001,143,143.0,Eury_gr2_(111),Eury_gr5_(19),Unk_unclust_(1),Eury_gr1_(6),MAV_eury_(6)
PC_00004,137,137.0,Eury_gr6_(20),Eury_gr11_(24),Eury_gr14_(24),Eury_gr8_(8),Eury_gr12_(13)
PC_00027,109,109.0,Eury_gr1_(80),MAV_eury_(8)
所需的输出将如下所示,名为“eury1”:
PC_00001,143,143.0,Eury_gr1_(6)
PC_00004,137,137.0,0
PC_00027,109,109.0,Eury_gr1_(80)
我使用的命令是:
awk 'BEGIN {FS=","};{for(i=4;i<=NF;i++){if($i~/^Eury_gr1_/){a=$i} else {a="0"}} print $1,$2,$3,a}' final_pcs_mod_test.csv > eury1
实际输出为:
PC_00001,143,143.0,0
PC_00004,137,137.0,0
PC_00027,109,109.0,Eury_gr1_(80)
如您所见,第一行缺少“Eury_gr1_”条目。看起来代码只在第一个指定的列中查找,而不是按照我的需要搜索所有列。我一直在搞乱for(i=4;i<=4;i++) 等......但到目前为止似乎无法让它在输入的最后一列中找到条目。整个输入文件最多有 17 列。我做错了什么?
【问题讨论】: