我的特殊任务是以file1中的方式排列文件2中的行,其中file1中的数字应与file2中的数字相对应。我的输出文件:
文件1
23
4
75
19
file2的
4 apple
19 mango
23 kiwi
75 orange
欲望输出:
23 kiwi
4 apple
75 orange
19 mango
现在,我只是用bash做了,但我特别感兴趣的是可以在awk中这样做。我尝试了以下代码NR==FNR {a=$1} NR!=FNR {if ($1==a) print $0;next}' file1 file2
,但它没有用。
感谢您的任何建议。
答案 0 :(得分:3)
没有理由不在这里使用next
。逻辑是直截了当的,为file2
中的file1
和$1
创建哈希映射,打印出其散列值。
awk 'FNR==NR{hash[$1]=$2; next}{print $1,hash[$1]}' file2 file1
23 kiwi
4 apple
75 orange
19 mango
答案 1 :(得分:2)
您可以尝试使用next
声明
awk 'NR==FNR {d[$1]=$0; next} {print d[$1]}' file2 file1
没有next
声明
awk 'NR==FNR {d[$1]=$0} NR!=FNR{print d[$1]}' file2 file1
你明白了,
23 kiwi
4 apple
75 orange
19 mango
答案 2 :(得分:1)
如果您想按顺序处理文件,例如 file1之前的文件2 和不使用下一个,那么您可以使用此awk-script ,档案fruits.awk
:
#!/usr/bin/awk
{
if(a1[$1]!=1)
a1[$1]=a2[FNR][$1]=1;
else{
for(i in a2) {
for(j in a2[i])
if(j==$1)
a2[i][j]=$2;
}
}
}
END {
for(i in a2) {
for(j in a2[i])
print j, a2[i][j];
}
}
使用:
$awk -f fruits.awk file1 file2
23 kiwi
4 apple
75 orange
19 mango