我有两个制表符分隔的文件:
file tmp1.tsv:
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
file tmp2.tsv:
3
2
4
我想得到这个:
3 ccc
2 bbb
4 ddd
使用以下例程:
$ cat tmp2.tsv | awk -F '\t' <magic here> tmp1.tsv
我知道如何在没有标准输入的情况下制作它:
$ awk -F '\t' 'FNR==NR{ a[$1] = $2; next }{ print $1 FS a[$1] }' tmp1.tsv tmp2.tsv
但不知道如何用stdin制作它。此外,将理解解决方案的解释。
答案 0 :(得分:3)
假设您的解决方案按预期工作,这很简单。而不是:
awk -F '\t' 'FNR==NR{ a[$1] = $2; next }{ print $1 FS a[$1] }' tmp1.tsv tmp2.tsv
简单地做:
< tmp2.tsv awk -F '\t' 'FNR==NR{ a[$1] = $2; next }{ print $1 FS a[$1] }' tmp1.tsv -
(请注意,我已使用重定向替换cat tmp2.tsv |
以避免使用UUOC。)
即,指定文件名-
,awk将从标准输入读取。