我有两个制表符分隔的文件f1
和f2
,如下所示:
f1:
id1 r1
id2 r2
id3 r3
...
idN rN
f2:
f1 g1 x1;id1
f2 g2 x2;id2
f4 g4 x2;id4
...
fM gM xm;idM
其中N
和M
可能不同。我正在寻找创建f1
的关联数组,并将f1
的第二列连接到f2
的末尾,以便输出为:
f1 g1 x1;id1=r1
f2 g2 x2;id2=r2
...
作为测试,我运行了这个:
awk 'BEGIN{FS=OFS="\t"} NR==FNR{id[$1]=$1; r[$1]=$2; next} {split($3,a,";"); if (a[2] in id) {print "found"} else {print "not found"}}' f1 f2
给出输出:
found
found
not found
...
但是,运行以下命令:
awk 'BEGIN{FS=OFS="\t"} NR==FNR{id[$1]=$1; r[$1]=$2; next} {split($3,a,";"); if (a[2] in id) {$3=$3"="r[$1]; print} else {print "not found"}}' f1 f2
给出输出:
f1 g1 x1;id1=
f2 g2 x2;id2=
not found
...
我的问题是:如何访问与密钥相关联的值,以便我可以将其附加到f2
的第3列?
答案 0 :(得分:1)
join
是用于加入文件的工具,特别是如果它们已经按键排序。
$ join -14 <(sed 's/;/; /' file2) file1 |
awk '{print $2,$3,$4$1 "=" $5}'
f1 g1 x1;id1=r1
f2 g2 x2;id2=r2
但是,您的输出格式不是标准格式,因此需要awk
。我想在这种情况下,整个脚本也可以在awk
中完成。