使用comm命令
假设两个文件FILE1和FILE2由集合a和b表示,则FILE1的内容如下:
a
B
C
e
d
a
FILE2的内容如下。
C
d
a
C
基本上有两种方法。 一个是comm命令,另一个是grep命令。 分别介绍如下
comm命令,comparesortedfilesfile1and file2line by line.withnooptions, produce three-column output.columnonecontainslinesunique columntwocontainslinesuniquetofile 2,andcolumnthreecontainslinesconescome 默认输出为3列
直接执行结果如下。
$ comm a.txt b.txt
a
B
C
d
a
C
e
d
a
仅限排序:
$ comm
a
a
B
C
C
d
e
而唯一:
$ comm
a
B
C
d
e
想要交叉的情况下,可以如下进行。
$ comm -12
a
C
d
grep命令:
grep命令一般搜索文本内容,要查找交叉点,请执行以下操作:
p$ grep -F -f a.txt b.txt
C
d
a
C
grep不要求排序,但因为是集合操作,所以唯一需要(请参阅。 所以:
$ grep -F -f a.txt b.txt | sort | uniq
a
C
d
差集:
$ grep-f-v-fa.txtb.txt|sort|uniq
$ grep-f-v-FB.txta.txt|sort|uniq
B
e
第一行的结果是B-A,所以为空; 第二行为A-B。 注意顺序很重要!
cat sort uniq
1 .检索两个文件的并集(只保留一个重复行) ) ) ) )。
cat file1 file2 | sort | uniq
2 .检索两个文件的交叉点(仅保留同时存在于两个文件中的文件) ) ) ) ) ) ) ) ) )。
cat file1file2- d
3 .删除交叉点,保留其他行
cat file1file2uniq-u
如果需要计数,但有一个很好的参数uniq -c,可以将相同行数的计数放在行的开头
排序顺序
根据从输入行中提取的一个或多个关键字进行比较。 排序键定义用于排序的最小字符串。 默认情况下,按整个行为的关键字按ASCII字符排序。
更改默认设置的选项主要有:
- m如果指定的文件已排序,则合并文件。
- c检查指定文件是否已排序,如果未排序,则打印错误消息,并以状态值1退出。
- u排序后只留下一行被认为相同。
- o输出文件将排序输出写入输出文件,而不是标准输出。 如果输出文件是输入文件之一,则sort会在排序和写入输出结果之前将该文件的内容写入临时文件。
更改默认排序规则的选项主要有:
- d按词典排序,并进行比较,以便只有字符、数字、空格和制表符有意义。
- f将小写字母与大写字母同等对待。
- I忽略非打印字符。
作为- M月的比较:“JAN”
- r按相反顺序输出排序结果。
-k,-key=POS1[,POS2] posl - pos2指定一个或多个字段作为排序关键字。 字段的位置以posl开始,一直到pos2。 包括posl,不包括pos2。 如果未指定pos2,则关键字从posl到行尾。 字段和字符的位置从0开始。
- b在每行中搜索排序键时,忽略开头的空白(空格和制表符)。
- t separator将字符separator指定为字段分隔符。
uniq命令
处理文件后,输出文件可能会显示重复的行。 例如,如果使用cat命令合并两个文件,然后使用sort命令进行排序,则可能会发生重复行。 在这种情况下,可以使用uniq命令从输出文件中删除这些重复行,只保留每个记录的唯一示例。
语法:
uniq [选项]文件
说明:此命令读取输入文件并比较相邻的行。 通常,会删除第二个和后续的重复行,并根据所用字符集的排序顺序进行行比较。 使用此命令加工的结果将写入输出文件。 输入文件和输出文件必须不同。 如果输入文件显示为“-”,则从标准输入读取。
此命令的每个选项的含义如下:
- c表示每行开头加上该行在文件中出现的次数的输出。 可以代替- u和- d选项。
- d仅显示重复行。
- u仅显示文件中不重复的每行。
- n前n个字段将与每个字段前面的空白一起被忽略。 字段是字符串,而不是空格,由制表符和空格分隔。 字段从0开始编号。
前n个字符将被忽略,前一个字符将被跳过(字符从0开始编号)。
- f n与- n相同,其中n是字段数。
- s n与n相同,其中n是字符数。
时间: 07-27