我有一个主文件 bla.tsv (FS= \t
):
id hub fil plop
34 ji ji
54 jo jo
46 ja ja
和一个信息文件 hub.csv (FS= ,
):
34,fuse
46,fose
我想将信息打印到这样的列hub.csv
中:hub
bla.tsv
id hub fil plop
34 fuse ji ji
54 jo jo
46 fose ja ja
我设法在正确的行中打印正确的信息,但在最后一个之后的列中:
awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' FS="," hub.csv FS="\t" bla.tsv > result.tsv
如何用在(如果有)bla.tsv
中找到的值填充第二列?hub.csv
请注意, 的结构bla.tsv
已经“正确”,即标题后的所有行中都有一个空的第二列(\t
ID 后连续两列)。
答案1
由于您的格式bla.tsv
已经正确,第二列为空,因此只需对您的方法进行最小程度的修改:
awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next} ($1 in a){$2=a[$1]} 1' FS="," hub.csv FS="\t" bla.tsv > result.tsv
这将在处理时bla.tsv
检查 IDhub
在数组中是否有匹配的值a
。如果是这样,它将第二个字段设置为该值,通常打印当前行(包括所做的所有修改)。