AWK - 比较两个文件 - 如果Field1相同,则比较行

时间:2017-09-05 19:18:33

标签: awk

有两个文件。当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

3 个答案:

答案 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