有两个文件。当field1在两个文件中相同时,比较相应的行。如果它们完全相同,那么接下来。如果有更多或更少的行或内容不同,则echo field1。
在下面的示例中,LSP1和LSP2存在差异。差异是行的总数,但它也可能是field2和/或field3的内容。 LSP3是一样的。所需的输出低于。
File1中
LSP1 3.3.3.3 ae3.0
LSP1 5.5.5.5 ae2.0
LSP1 4.4.4.4 ae4.0
LSP1 7.7.7.7 ae1.0
LSP2 7.7.7.7 ae6.0
LSP2 3.3.3.3 ae4.0
LSP2 5.5.5.5 ae6.0
LSP2 4.4.4.4 ae1.0
LSP2 2.2.2.2 ae2.0
LSP3 5.5.5.5 ae4.0
LSP3 4.4.4.4 ae5.0
LSP3 7.7.7.7 ae3.0
文件2
LSP1 3.3.3.3 ae3.0
LSP1 8.8.8.8 ae2.0
LSP1 4.4.4.4 ae4.0
LSP1 7.7.7.7 ae1.0
LSP1 2.2.2.2 ae2.0
LSP2 7.7.7.7 ae6.0
LSP2 3.3.3.3 ae1.0
LSP2 2.2.2.2 ae2.0
LSP3 5.5.5.5 ae4.0
LSP3 4.4.4.4 ae5.0
LSP3 7.7.7.7 ae3.0
输出
LSP1
LSP2
答案 0 :(得分:1)
使用单个 awk :
awk '{ k=$1 FS $2 FS $3 }NR==FNR && NF{ a[k]=$1; next }
NF{ if(k in a) delete a[k]; else if(!b[$1]++) print $1 }
END{ for(i in a) if(!(a[i] in b)) print a[i] }' file1 file2
输出:
LSP1
LSP2
答案 1 :(得分:0)
UINavigationController
$ comm -3 file1 file2 | awk '$1 { print $1 }' | uniq
LSP1
LSP2
将输出仅comm -3
中的file1
xor 中的行。
file2
脚本将从非空行(空格分隔)中提取第1列,awk
将删除重复项。
请注意,uniq
假设已排序输入。
答案 2 :(得分:0)
$ awk -v RS= 'NR==FNR{a[$1]=$0;next} $0!=a[$1]{print $1}' file1 file2
LSP1
LSP2