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,我想说这稍微短一点,但不是更快