比较多个文件中的字段

时间:2014-07-12 17:13:39

标签: unix awk

我有一些文件。每个文件的内容如下所示。 (参数,每个都有一个值)。每个参数都在一个新行中。

x=1 y=23 z=30

我想打印文件名和参数及其值,但前提是该参数在所有文件中的值不同。 (如果有三个文件,并且假设x在两个文件中为1而在另一个文件中为2,则应考虑输出x)。请建议我使用shell脚本解决方案。

2 个答案:

答案 0 :(得分:1)

以下行将存储从参数名称到参数值的映射,并输出任何不匹配的文件名,键和值。请注意,它仅输出导致冲突的第二行和/或第三行,而不是原始值。

如果您还要输出导致冲突的原件,则需要存储原件的文件名。

awk -F'=' '{if($1 in arr && arr[$1] != $2) print FILENAME, $1, $2; arr[$1] = $2}' File1  File2 File3

答案 1 :(得分:0)

与merlin2011略有不同,但基础相同:

awk -F'=' '{if(!x[$1]){x[$1]=$2;next} if(x[$1]!=$2){print FILENAME":" $0}}' file1 file2 file3

如果未分配值,我会将值分配给数组,然后使用next忽略该行。