Grep 返回多个匹配记录的最后一行-Git Bash

Grep 返回多个匹配记录的最后一行-Git Bash,grep,git-bash,tail,Grep,Git Bash,Tail,我有两个文件 一个文件包含以下记录: 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 第二个文件包含以下记录: 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命令,该命令将返回

我有两个文件

一个文件包含以下记录:

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
第二个文件包含以下记录:

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
    -最终包含相同第一个字段值的最后第二个字段值


  • 打高尔夫球:
    awk-F,'NR==FNR{a[$1]=1;next}a[$1]{b[$1]=$2}END{对于(i in b)print i FS b[i]}'
    @GeorgeVasiliou,我想说这稍微短一点,但不是更快