关于用awk查询两个文件的问题?

关于用awk查询两个文件的问题?


file1
111     aaa
344     ddd
744     ccc

file2
233     bbb
677     ccc
888     aaa
932     fff
892     eee
需求:
当file1中$2部分与file2中$2部分相同的,将file1的$1部分附加成file2的$3显示输出或>file3
用awk怎么实现?
请大虾指教!TKS
      
复制内容到剪贴板
代码:
[color=blue]-(user@host:tty)-(tmp)-
[13580 0] %[/color] cat file1
111 aaa
344 ddd
744 ccc
[color=blue]-(user@host:tty)-(tmp)-
[13580 0] %[/color] cat file2
233 bbb
677 ccc
888 aaa
932 fff
892 eee
[color=blue]-(user@host:tty)-(tmp)-
[13580 0] %[/color] cat file.awk
#!/usr/bin/awk -f

BEGIN {
    while (getline < "file1") {
        a[$2] = $1
    }

    while (getline < "file2") {
        if (a[$2]) {
            print $1, $2, a[$2]
        } else {
            print
        }
    }
}
[color=blue]-(user@host:tty)-(tmp)-
[13580 0] %[/color] ./file.awk
233 bbb
677 ccc 744
888 aaa 111
932 fff
892 eee
[color=blue]-(user@host:tty)-(tmp)-
[13580 0] %[/color]
      
好像有更简单一点的方法,只是偶还没看明白,斑主是不是可以帮忙解释一下,代码如下?谢谢!

awk 'NR==FNR{a[$2]=$1}NR>FNR&&a[$2]{print $0,a[$2]}' file1 file2

实验后发现效果一样!

还有一种方法是用sort加join也能达到效果,不过不如用awk好,给大家一个参考:
sort file1 -k2,2>file3
sort file2 -k2,2>file4
join file3 file4 -1 2 -2 2      
[quote=libra]awk 'NR==FNR{a[$2]=$1}NR>FNR&&a[$2]{print $0,a[$2]}' file1 file2[/quote]这个用得好
复制内容到剪贴板
代码:
FNR         The input record number in the current input file.
NR          The total number of input records seen so far.
      
俺对 awk 基本上不算懂, 一般都是现学现卖, 卖的不好, 请高人指点       
[QUOTE=dearvoid]俺对 awk 基本上不算懂, 一般都是现学现卖, 卖的不好, 请高人指点 [/QUOTE]

斑主这么谦虚,搞得偶都不好意思了,改天让otto请我们吃饭(如果你在杭州的话)~
哇哈哈~