我有一些文件。每个文件的内容如下所示。 (参数,每个都有一个值)。每个参数都在一个新行中。
x=1
y=23
z=30
我想打印文件名和参数及其值,但前提是该参数在所有文件中的值不同。 (如果有三个文件,并且假设x在两个文件中为1而在另一个文件中为2,则应考虑输出x)。请建议我使用shell脚本解决方案。
答案 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
忽略该行。