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

AWK-比较两个文件-如果Field1相同,则比较行,awk,Awk,有两个文件。当两个文件中的字段1相同时,比较相应的行。如果它们完全相同,那么下一个。如果有多行或少行,或者内容不同,则返回字段1 在下面的示例中,LSP1和LSP2存在差异。区别在于行的总数,但也可能是字段2和/或字段3的内容。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 LS

有两个文件。当两个文件中的字段1相同时,比较相应的行。如果它们完全相同,那么下一个。如果有多行或少行,或者内容不同,则返回字段1

在下面的示例中,LSP1和LSP2存在差异。区别在于行的总数,但也可能是字段2和/或字段3的内容。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
LSP1
LSP2
comm-3
将输出仅在
file1
xor
file2
中的行

awk
脚本将从非空行(以空格分隔)中提取列1,
uniq
将删除重复项

请注意,
comm
采用排序输入。

使用单个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
输出:


请告诉我们解决方案的哪一部分是您的问题,以便我们提供帮助。输入文件中的行是否已排序?我投票结束此问题,因为它似乎是一个对工具或解决方案的建议请求,而不是对您自己的代码的协助请求。这使您的问题脱离StackOverflow的主题。如果这个评估是不正确的,你确实需要帮助编写你自己的代码,那么请,我很高兴收回我的投票。我可以按字母顺序排列。很好。删除了我的。你可以在a中使用$0作为索引,并去掉k.@MarcLambrichs,这不能保证每个记录中字段之间的空白数量相等。在你的方法中不要这样做
LSP1
LSP2
$ awk -v RS= 'NR==FNR{a[$1]=$0;next} $0!=a[$1]{print $1}' file1 file2
LSP1
LSP2