shell比较两个数组/字符串/文件差异:comm命令

s1="111 eee 333 aaa 555 bbb fff ccc ddd"
s2="555 ggg fff hhh aaa 333"
comm <(echo $s1 | sed 's/ /\n/g' | sort) <(echo $s2 | sed 's/ /\n/g' | sort) --total

输出如下:

111
		333
		555
		aaa
bbb
ccc
ddd
eee
		fff
	ggg
	hhh
5	2	4	总用量

comm命令默认列间隔是一个tab键,如果单个字符串长度太长,可能不好看,可以通过-output-delimiter更改: 

comm <(echo $s1 | sed 's/ /\n/g' | sort) <(echo $s2 | sed 's/ /\n/g' | sort) --total --output-delimiter="$(printf "%.s\t" {1..2})"

其中:

printf "%.s\t" {1..n}:输出n个tab键

 输出如下:

111
				333
				555
				aaa
bbb
ccc
ddd
eee
				fff
		ggg
		hhh
5		2		4		总用量

comm对比按行排序的文件,文件可以是文件名,也可以从标准输入来,像上面的例子就是标准输入来的,使用了"<(命令)",将"命令"的输出当做comm的输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值