2017-07-05 31 views
0

我有两个文件.....返回的多个匹配记录最后一行 - 混帐击

一个文件包含记录:

123 
456 
789 
abc 
def 
ghi 

第二个文件包含记录:

123,a 
123,b 
456,a 
456,b 
789,a 
789,b 
abc,1 
abc,2 
def,1 
def,2 
ghi,1 
ghi,2 

尝试执行grep和tail命令,该命令将返回文件2中匹配字符串的最后一行,以便输出文件返回以下内容:

123,b 
456,b 
789,b 
abc,2 
def,2 
ghi,2 

尝试使用以下,但它只是返回最后一个匹配的记录中的最后一行:

grep -f file1.txt file2.txt | tail -1 > output.txt 

回答

1

使用AWK解决方案:

awk 'NR==FNR{ a[$0]; next }$1 in a{ b[$1]=$2 }END{ for(i in b) print i FS b[i] }' file1 FS=',' file2 

输出:

def,2 
abc,2 
ghi,2 
123,b 
456,b 
789,b 

  • FS=',' - 场分离

  • b[$1]=$2 - 最终包含了相同的1场的最后第二个字段的值值

+0

高尔夫:'awk的-F,“NR == FNR {一[$ 1] = 1;下一个} a [$ 1] {b [$ 1] = $ 2} END {for(i in b)print i FS b [i]}'' –

+0

@GeorgeVasiliou,我会说这有点短,但不会更快 – RomanPerekhrest

相关问题