shell中比较两个文件脚本实例讲解

需求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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值