如何使用两个文件中的公共键打印值,但在 awk 的特定列中

如何使用两个文件中的公共键打印值,但在 awk 的特定列中

我有一个主文件 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中:hubbla.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已经“正确”,即标题后的所有行中都有一个空的第二列(\tID 后连续两列)。

答案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。如果是这样,它将第二个字段设置为该值,通常打印当前行(包括所做的所有修改)。

相关内容