我正在尝试将File1的column1的每个条目与File2进行比较,并同时打印两者。 File1的Column1可能具有重复的条目。在重复输入的情况下,我只能看到一条输出行。但我都想要
我的代码是awk 'FNR==NR{a[$1]=$0;next}; $1 in a {print $0"\t"a[$1]}' File1.txt File2.txt
File1.txt
aa c d
aa c e
File2.txt
aa 5
aa 7
aa 9
bb 7
cc 1
预期产量
aa 5 aa c d
aa 7 aa c d
aa 9 aa c d
aa 5 aa c e
aa 7 aa c e
aa 9 aa c e
我的代码给了我
aa 5 aa c e
aa 7 aa c e
aa 9 aa c e
答案 0 :(得分:1)
join
命令就是这种情况:
$ join File{1,2}.txt
aa c d 5
aa c d 7
aa c d 9
aa c e 5
aa c e 7
aa c e 9
输出不完全是您想要的,所以让我们修复一下:
$ join File{1,2}.txt | awk '{$1 = $1 FS $NF FS $1; $NF = ""; print}'
aa 5 aa c d
aa 7 aa c d
aa 9 aa c d
aa 5 aa c e
aa 7 aa c e
aa 9 aa c e
如果输入文件未排序,那么(假设您的shell是bash / ksh / zsh)
join <(sort File1.txt) <(sort File2.txt)
请参阅bash手册中的3.5.6 Process Substitution。
答案 1 :(得分:1)
带有sort/join
$ join <(sort file2) <(sort file1) -o1.1,1.2,2.1,2.2,2.3
aa 5 aa c d
aa 5 aa c e
aa 7 aa c d
aa 7 aa c e
aa 9 aa c d
aa 9 aa c e