将文件与awk进行比较

将文件与awk进行比较,awk,comparison,compare,two-columns,Awk,Comparison,Compare,Two Columns,嗨,我有两个相似的文件(都有3列)。我想检查这两个文件是否包含相同的元素(但以不同的顺序列出)。首先,我只想比较第一列 file1.txt "aba" 0 0 "abc" 0 1 "abd" 1 1 "xxx" 0 0 file2.txt "xyz" 0 0 "aba" 0 0 "xxx" 0 0 "abc" 1 1 我如何使用awk完成它?我试着四处看看,但只找到了一些复杂的例子。如果我还想在比较中包括其他两列,该怎么办?输出应提供匹配元素的数量。要打印两个文件中的公共元素: $ aw

嗨,我有两个相似的文件(都有3列)。我想检查这两个文件是否包含相同的元素(但以不同的顺序列出)。首先,我只想比较第一列

file1.txt

"aba" 0 0 
"abc" 0 1
"abd" 1 1 
"xxx" 0 0
file2.txt

"xyz" 0 0
"aba" 0 0
"xxx" 0 0
"abc" 1 1
我如何使用awk完成它?我试着四处看看,但只找到了一些复杂的例子。如果我还想在比较中包括其他两列,该怎么办?输出应提供匹配元素的数量。

要打印两个文件中的公共元素:

$ awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2
"aba"
"abc"
"xxx"
说明:

NR
FNR
awk
变量,分别存储当前文件中的记录总数和记录数(默认记录为一行)

如果要匹配整行,请使用
$0

$ awk 'NR==FNR{a[$0];next}$0 in a{print $0}' file1 file2
"aba" 0 0
"xxx" 0 0
或一组特定的列:

$ awk 'NR==FNR{a[$1,$2,$3];next}($1,$2,$3) in a{print $1,$2,$3}' file1 file2
"aba" 0 0
"xxx" 0 0

要打印匹配元素的数量,这里有一种使用
awk
的方法:

awk 'FNR==NR { a[$1]; next } $1 in a { c++ } END { print c }' file1.txt file2.txt
使用您的输入的结果:

3
2

如果要添加额外的列(例如,列1、列2和列3),请使用:

使用您的输入的结果:

3
2

+1.由于OP的文件只有3列,因此最好只使用
a[$0]
而不是
a[$1,$2,$3]
。但是,两个文件中任何不匹配的不可见尾随空格都可能导致意外输出。也许可以使用rtrim或gsub。像这样使用->za$awk'FNR==NR{a[$1];next}!($1 in a)END{print$1}'test.csv test2.csv以打印不匹配的记录。@zee:谢谢投票,但您不需要因为awk脚本的解释而特别投票,谢谢@iiSeymour如果在关联数组中找到文件2的第一个结尾,如何打印文件1的第二个结尾?