使用AWK连接两个表,一个来自stdin,另一个来自文件

时间:2014-04-21 14:50:25

标签: awk gawk tab-delimited

我有两个制表符分隔的文件:

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制作它。此外,将理解解决方案的解释。

1 个答案:

答案 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将从标准输入读取。