目录
单个文件
1. 查看文件行数
wc -l file # 输出 file 的行数
2. 检查和处理文件重复行的数据 ( --uniq命令 )
使用uniq的时候要注意点:
对文本操作时,它一般会和sort命令进行组合使用,因为 uniq 不会检查重复的行,除非它们是相邻的行。如果您想先对输入排序,使用sort -u。
- 重复行相邻
2.1 去除重复行
uniq file
2.2 删除重复行并且统计各行在文件中出现的次数
uniq -c file
2.3 查找非重复行,仅显示出1次的行列
uniq -u file
2.4 查找重复行,仅显示出大于1次(重复)的行列
uniq -d file
- 重复行不相邻,先使用sort排序
2.5 去除重复行
sort file | uniq
2.6 删除重复行并且统计各行在文件中出现的次数
sort file | uniq -c
2.7 查找非重复行,仅显示出1次的行列
sort file | uniq -u
2.8 查找重复行,仅显示出大于1次(重复)的行列
sort file | uniq -d
多个文件
1. 比较两个文件里面的内容是否一致
- 取相同的行
grep -wf [file1] [file2] ...
- 取不同的行
grep -wvf [file1] [file2] ...
- 逐行比较文件的不同,怎么改变第一个文件之后与第二个文件匹配。
diff [选项] file1 file2
diff file1 file2 #正常显示
diff -c file1 file2 #上下文格式显示
diff -u file1 file2 #合并格式显示
常用选项
选项 | 含义 | 备注 |
-b | 不检查空格 | |
-B | 不检查空白行 | |
-i | 不检查大小写 | |
-w | 忽略所有的空格 | |
-normal | 正常格式显示(默认) | |
-c | 上下文格式显示 | |
-u | 合并格式 |
举例说明
[wqf@hello rm_test]$ cat file1.txt
aaaa
111
hello world
222
333
bbb
[wqf@hello rm_test]$ cat file2.txt
aaa
hello
111
222
bbb
333
world
[wqf@hello rm_test]$ grep -wf file1.txt file2.txt #取相同的行
111
222
bbb
333
[wqf@hello rm_test]$ grep -wvf file1.txt file2.txt #取不同的行
aaa
hello
world
[wqf@hello rm_test]$ diff file1.txt file2.txt
1c1,2 第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配
< aaaa 小于号"<"表示左边文件(file1)文件内容
--- ---表示分隔符
> aaa 大于号">"表示右边文件(file2)文件内容
> hello 第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
3d3
< hello world
5d4 第一个文件的第5行删除后才能和第二个文件的第4行匹配
< 333
6a6,7 第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配
> 333 需要增加的内容在第二个文件里是333和world
> world
[wqf@hello rm_test]$ diff -c file1.txt file2.txt
两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示file2
*** file1.txt 2023-01-05 09:34:40.868721925 +0800
--- file2.txt 2023-01-05 09:35:02.513082078 +0800
*************** 我是分隔符
*** 1,6 **** 以***开头表示file1文件,1,6表示1到6行
! aaaa !表示该行需要修改才与第二个文件匹配
111
- hello world -表示需要删除该行才与第二个文件匹配
222
- 333 -表示需要删除该行才与第二个文件匹配
bbb
--- 1,7 ---- 以---开头表示file2文件,1,7表示1到7行
! aaa 表示第一个文件需要修改才与第二个文件匹配
! hello 表示第一个文件需要修改才与第二个文件匹配
111
222
bbb
+ 333 表示第一个文件需要加上该行才与第二个文件匹配
+ world 表示第一个文件需要加上该行才与第二个文件匹配
[wqf@hello rm_test]$ diff -u file1.txt file2.txt
--- file1.txt 2023-01-05 09:34:40.868721925 +0800
+++ file2.txt 2023-01-05 09:35:02.513082078 +0800
@@ -1,6 +1,7 @@
-aaaa -表示第一个文件需要删除aaaa
+aaa +表示第一个文件需要添加aaa
+hello +表示第一个文件需要添加hello
111 表示第一个文件不变
-hello world -表示第一个文件删除hello world
222 表示第一个文件不变
-333 -表示第一个文件需要删除333
bbb 表示第一个文件不变
+333 +表示第一个文件需要添加333
+world +表示第一个文件需要添加world
tip
情景:有时候我们需要以一个文件为标准,去修改其他文件,并且修改的地方较多时,我们可以通过打补丁的方式完成。
1)先找出文件不同,然后输出到一个文件
[wqf@hello rm_test]$ diff -uN file1.txt file2.txt > file.patch
-u:上下文格式
-N:将不存在的文件当作空文件
2)将不同内容打补丁到文件
[wqf@hello rm_test]$ patch file1.txt file.patch
patching file file1.txt
3)测试验证
[wqf@hello rm_test]$ diff file1.txt file2.txt
[wqf@hello rm_test]$
2. 文件合并
2.1 两个文件合并
cat file1 file2 > file3 #一个文件在上,一个文件在下
paste file1 file2 > file3 #一个文件在左,一个文件在右
2.2 两个文件交集、并集
前提条件:每个文件中不得有重复行
2.2.1 取两个文件的并集(重复的行只保留一份)
cat file1 file2 |sort| uniq > file3
2.2.2 取两个文件的交集(只留下同时存在于两个文件中的文件)
cat file1 file2 |sort|uniq -d > file3
2.2.3 删除交集,取并集
cat file1 file2 |sort|uniq -u > file3