跳到主要内容

文本分析-wc sort uniq diff

文本数据统计 wc

wc 命令可用于统计文件文本及标准输入文本的行总数、单词总数、字节总数和字符总数

语法格式:wc [options] [file]

#常用选项
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

文本排序 sort

把整理过的文本显示在STDOUT(标准输出),不改变原始文件

sort [options] file(s)

# 常用选项
-r 倒序
-R 随机排序
-n 按数字大小
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 使用c做为字段界定符
-k b 按照使用c字符分隔的b列来整理,能够使用多次
[leo@CentOS7 ~]$cut -d: -f1,3 /etc/passwd|sort -t: -k2 -nr |head -n3
leo:1001
lighthouse:1000
polkitd:999

文本去重 uniq

删除前后相接的重复的行

uniq [OPTION]... [FILE]...

# 常见选项
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行

uniq常和sort 命令一起配合使用

例:

[leo@CentOS7 ~]$sudo lastb |head -n3
oracle ssh:notty 124.221.126.167 Thu Aug 11 18:24 - 18:24 (00:00)
weblogic ssh:notty 124.221.126.167 Thu Aug 11 18:05 - 18:05 (00:00)
user ssh:notty 124.221.126.167 Thu Aug 11 17:54 - 17:54 (00:00)
[leo@CentOS7 ~]$sudo lastb |wc -l
1564
[leo@CentOS7 ~]$sudo lastb |tr -s ' '|cut -d ' ' -f3|sort|uniq -c|wc -l
192
[leo@CentOS7 ~]$sudo lastb |tr -s ' '|cut -d ' ' -f3|sort|uniq -c|sort -nr|head -n5
329 49.233.39.32
329 43.138.89.166
261 31.184.198.71
129 150.158.166.12
101 124.221.126.167

文件比较 diff

diff 命令比较两个文件之间的区别

[leo@CentOS7 ~]$cat f1
cake
hotdog
cookie
ice
I like banana.
[leo@CentOS7 ~]$cat f2
cake
hot dog
cookie
ice-cream
I like orange.
milk
[leo@CentOS7 ~]$diff f1 f2
2c2
< hotdog
---
> hot dog
4,5c4,6
< ice
< I like banana.
---
> ice-cream
> I like orange.
> milk

patch补丁

diff 命令的输出被保存在一种叫做“补丁”的文件中

使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

patch 复制在其它文件中进行的改变(要谨慎使用)

用 -b 选项来自动备份改变了的文件

# 生成由f1到f2的patch文件
[leo@CentOS7 ~]$diff -u f1 f2 > f.patch
[leo@CentOS7 ~]$cat f.patch
--- f1 2022-08-11 20:24:03.857662748 +0800
+++ f2 2022-08-11 20:22:36.093646477 +0800
@@ -1,5 +1,6 @@
cake
-hotdog
+hot dog
cookie
-ice
-I like banana.
+ice-cream
+I like orange.
+milk
# 通过f.patch,把f1文件的内容修改成和f2文件一样,并且备份原来的f1
[leo@CentOS7 ~]$cat f1
cake
hotdog
cookie
ice
I like banana.
[leo@CentOS7 ~]$patch -b f1 f.patch
patching file f1
[leo@CentOS7 ~]$cat f1
cake
hot dog
cookie
ice-cream
I like orange.
milk
## -b参数自动生成f1的备份:f1.orig
[leo@CentOS7 ~]$cat f1.orig
cake
hotdog
cookie
ice
I like banana.