返回的多个匹配记录最后一行 - 混帐击
问题描述:
我有两个文件.....返回的多个匹配记录最后一行 - 混帐击
一个文件包含记录:
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
答
使用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场的最后第二个字段的值值
高尔夫:'awk的-F,“NR == FNR {一[$ 1] = 1;下一个} a [$ 1] {b [$ 1] = $ 2} END {for(i in b)print i FS b [i]}'' –
@GeorgeVasiliou,我会说这有点短,但不会更快 – RomanPerekhrest