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的输入。