25. Bash Shell - 文本处理:uniq、comm

浪尽此生 提交于 2020-01-24 09:19:09

开篇词

我们可以借助 Linux 提供的 uniqcomm 命令来去重或比较文件的内容。
 

非重复结果

我们为 uniq 命令准备一些重复的以及非重复的内容:

echo 'I am duplicated' >> uniq_file.txt
echo 'I am duplicated' >> uniq_file.txt
echo 'I am duplicated' >> uniq_file.txt
echo 'I am Duplicated' >> uniq_file.txt
echo 'I am Duplicated' >> uniq_file.txt
echo 'I am Duplicated' >> uniq_file.txt
echo 'Line unique 1' >> uniq_file.txt
echo 'Line unique 2' >> uniq_file.txt
echo 'Line unique 3' >> uniq_file.txt

准备一些重复以及非重复的内容
默认情况下,uniq 命令输出不包含其后的重复内容:

uniq uniq_file.txt

输出所有但不重复的内容 

重复内容

我们可以加入 -d--repeated 参数来输出文件的重复内容:

uniq -d uniq_file.txt
uniq --repeated uniq_file.txt

输出 uniq_file.txt 文件的重复内容
 

非重复内容

我们可以加入 -u--unique 参数来输出文件的非重复内容:

uniq -u uniq_file.txt
uniq --unique uniq_file.txt

输出 uniq_file.txt 文件的非重复内容
 

不区分大小写的重复内容

我们可以加入 -d--repeated-i--ignore-case 参数来不区分大小写输出文件的重复内容:

uniq -d -i uniq_file.txt
uniq --repeated --ignore-case uniq_file.txt

不区分大小写输出 uniq_file.txt 文件的重复内容
 

输出内容以及其出现次数

我们可以加入 -c--count 参数来输出文件的重复内容及其出现次数:

uniq -c uniq_file.txt
uniq --count uniq_file.txt

输出 uniq_file.txt 文件内容及其出现次数
 

对比结果

我们需要创建两个文件用以演示 comm 命令:

printf '%s\n' a b c d e     > file1
printf '%s\n'   b c d e f g > file2
cat file1
cat file2

将内容打印至 file1 以及 file2
默认情况下,comm 输出三列数据,第一列是两个文件对比之后第一个文件里的非重复数据,第二列是对比之后第二个文件里的非重复数据,第三列是两个文件对比之后重叠的数据:

comm file1 file2

对比 file1 与 file2 文件
 

隐藏第一列

我们可以借助 -1 参数来隐藏第一列:

comm -1 file1 file2

隐藏第一列
 

隐藏第二列

我们可以借助 -2 参数来隐藏第二列:

comm -2 file1 file2

隐藏第二列
 

隐藏第三列

我们可以借助 -3 参数来隐藏第三列:

comm -3 file1 file2

隐藏第三列
 

显示第一列

我们可以借助 -23 参数来显示第一列:

comm -23 file1 file2

显示第一列
 

显示第二列

我们可以借助 -13 参数来显示第二列:

comm -13 file1 file2

显示第二列
 

显示第三列

我们可以借助 -12 参数来显示第三列:

comm -12 file1 file2

显示第三列
 

我所撰写的英文版本

25. Bash Shell - Text Processing: uniq, comm
 

引用

参见

想看手册的其他内容?请访问该手册的所属专栏:《Linux 管理员手册:既简单又深刻

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!