需求1:
文件1.txt和2.txt,文件有两列,第一列是key,第二列是value
1.txt文件内容如下:
aaa 1
bbb 2
ccc 3
ddd 2
2.txt文件内容如下:
aaa 2
bbb 2
ccc 2
ddd 2
两个文件中找出key相同,但value不同的,并打印出来
要找出两个文件中key相同但value不同的行,可以使用awk
命令在Linux Shell中实现。以下是实现这个功能的脚本如下:
awk 'NR==FNR{a[$1]=$2; next} {if ($2 != a[$1]) print $1, a[$1], $2}' 1.txt 2.txt
解释:
1. `NR==FNR`:这是`awk`的一个条件,判断当前处理的行号是否等于当前文件的行号。这个条件用于区分第一个文件和第二个文件。
2. `a[$1]=$2`:将第一个文件的第一列(key)作为数组`a`的索引,第二列(value)作为值存储。
3. `next`:在读取完第一个文件的一行后,跳过后面的命令,继续读取下一行。
4. `{if ($2 != a[$1]) print $1, a[$1], $2}`:在读取第二个文件时,检查当前行的key的value是否与数组`a`中对应的value不同。如果不同,则打印出key以及两个不同的value。
示例输出:
根据你提供的示例数据,运行上述命令将输出以下结果:
aaa 1 2
ccc 3 2
ddd 2 2