comm命令
comm命令
comm
命令用于比较两个已排过序的文件,该命令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3
列显示:第1
列仅是在第1
个文件中出现过的列,第2
列是仅在第2
个文件中出现过的列,第3
列则是在第1
与第2
个文件里都出现过的列,若给予的文件名称为-
,则comm
命令会从标准输入设备读取数据。
语法
comm [OPTION]... FILE1 FILE2
参数
-1
: 禁止列1
(FILE1
唯一的行)。-2
: 禁止列2
(FILE2
唯一的行)。-3
: 禁止列3(出现在两个文件中的行)。--check-order
: 检查输入是否正确排序,即使所有输入行都是可配对的。--nocheck-order
: 不检查输入是否正确排序。--output-delimiter=STR
: 用字符串STR
分隔列。-z, --zero-terminated
: 指定行分隔符是NUL
,不是换行符。--help
: 显示帮助消息。--version
: 输出版本信息。
示例
recipe.txt
文件与shopping-list.txt
文件内容,这两个文件不同,但许多行是相同的,并非所有的配方成分都在购物清单上,也不是购物清单上的所有成分都是食谱的一部分。
# recipe.txt
All-Purpose Flour
Baking Soda
Bread
Brown Sugar
Chocolate Chips
Eggs
Milk
Salt
Vanilla Extract
White Sugar
# shopping-list.txt
All-Purpose Flour
Bread
Brown Sugar
Chicken Salad
Chocolate Chips
Eggs
Milk
Onions
Pickles
Potato Chips
Soda Pop
Tomatoes
White Sugar
使用comm
命令,其将读取这两个文件并给我们三列输出,在这里,每行输出的开头都有0
、1
或2
个制表符,将输出分成三列:
- 第一列
zero tabs
是只出现在第一个文件中的行。 - 第二列
one tabs
是只出现在第二个文件中的行。 - 第三列
two tabs
是出现在两个文件中的行。
comm recipe.txt shopping-list.txt
# All-Purpose Flour
#Baking Soda
# Bread
# Brown Sugar
# Chicken Salad
# Chocolate Chips
# Eggs
# Milk
# Onions
# Pickles
# Potato Chips
#Salt
# Soda Pop
# Tomatoes
#Vanilla Extract
# White Sugar
比较recipe.txt
文件与shopping-list.txt
文件,并禁用第1
与第2
列的输出。
comm -12 recipe.txt shopping-list.txt
# All-Purpose Flour
# Bread
# Brown Sugar
# Chocolate Chips
# Eggs
# Milk
# White Sugar
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://www.computerhope.com/unix/ucomm.htm
https://www.runoob.com/linux/linux-comm-comm.html
https://www.geeksforgeeks.org/comm-command-in-linux-with-examples/