| 管道相关命令
目标
cut
sort
wc
uniq
tee
tr
split
awk
sed
grep
-
准备数据
zhangsan 68 99 26 lisi 98 66 96 wangwu 38 33 86 zhaoliu 78 44 36 maq 88 22 66 zhouba 98 44 46
-
以上是成绩表信息
-
使用 逗号 分割, 第一列 是 姓名, 第二列是 语文成绩, 第三列是 数学成绩, 第四列是 英语成绩
-
需求1: 按照 数学成绩排名, 取出前三名
-
需求2: 显示 学生的数学成绩
-
需求3: 显示 数学平均分
-
需求4: 如何将大文件 切割成 若干小文件
-
准备工作
cd /export/ && rm -rf * vim 1.txt
111:aaa:bbb:ccc 222:ddd:eee:fff 333:ggg:hhh 444:iii
1 cut
1.1 目标
cut
根据条件 从命令结果中 提取 对应内容
1.2 路径
- 第一步: 截取出1.txt文件中前2行的第5个字符
- 第二步: 截取出1.txt文件中前2行以”:”进行分割的第1,2,3段内容(方式二)
1.3 实现
第一步: 截取出1.txt文件中前2行的第5个字符
命令 | 含义 |
---|---|
cut 动作 文件 | 从指定文件 截取内容 |
- 参数
参数 | 英文 | 含义 |
---|---|---|
-c | characters | 按字符选取内容 |
答案:
head -2 1.txt | cut -c 5
[root@node01 export]# cut -c 5 1.txt
a
d
g
i
[root@node01 export]# cat 1.txt
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii
[root@node01 export]# cat 1.txt | cut -c 5
a
d
g
i
[root@node01 export]# head -2 1.txt
111:aaa:bbb:ccc
222:ddd:eee:fff
[root@node01 export]# head -2 1.txt | cut -c 5
a
d
第二步: 截取出1.txt文件中前2行以”:”进行分割的第1,2,3段内容
参数 | 英文 | 含义 |
---|---|---|
-d '分隔符' |
delimiter | 指定分隔符 |
-f n1,n2 |
fields | 分割以后显示第几段内容, 使用 , 分割 |
范围控制
范围 | 含义 |
---|---|
n |
只显示第n项 |
n- |
显示 从第n项 一直到行尾 |
n-m |
显示 从第n项 到 第m项(包括m) |
答案:
head -2 1.txt | cut -d ':' -f 1,2,3
或者
head -2 1.txt | cut -d ':' -f 1-3
1.3 小结
- 通过
cut 动作 目标文件
可以根据条件 提取对应内容
2 sort 的 工作原理
2.1 目标
- sort可针对文本文件的内容,以行为单位来排序。
2.2 路径
- 第一步: 对字符串排序
- 第二步: 去重排序
- 第三步: 对数值排序
- 第四步: 对成绩排序
2.3 实现
第一步: 对字符串排序
- 准备工作
cd /export
vim 2.txt
banana
apple
pear
orange
pear
[root@node01 export]# cat 2.txt
banana
apple
pear
orange
pear
[root@node01 export]# sort 2.txt
apple
banana
orange
pear
pear
[root@node01 export]# cat 2.txt | sort
apple
banana
orange
pear
pear
第二步: 去重排序
参数 | 英文 | 含义 |
---|---|---|
-u |
unique | 去掉重复的 |
它的作用很简单,就是在输出行中去除重复行。
[root@node01 export]# cat 2.txt
banana
apple
pear
orange
pear
[root@node01 export]# sort 2.txt
apple
banana
orange
pear
pear
You have new mail in /var/spool/mail/root
[root@node01 export]# sort -u 2.txt
apple
banana
orange
pear
[root@node01 export]# cat 2.txt | sort -u
apple
banana
orange
pear
第三步: 对数值排序
参数 | 英文 | 含义 |
---|---|---|
-n |
numeric-sort | 按照数值大小排序 |
-r |
reverse | 使次序颠倒 |
-
准备数据
cd /export/ vim 3.txt
1 3 5 7 11 2 4 6 10 8 9
-
默认按照
字符串
排序[root@node01 export]# sort 3.txt 1 10 11 2 3 4 5 6 7 8 9 [root@node01 export]# cat 3.txt | sort 1 10 11 2 3 4 5 6 7 8 9
-
升序
[root@node01 export]# sort -n 3.txt 1 2 3 4 5 6 7 8 9 10 11 [root@node01 export]# cat 3.txt | sort -n 1 2 3 4 5 6 7 8 9 10 11
-
倒序
[root@node01 export]# cat 3.txt | sort -n -r 11 10 9 8 7 6 5 4 3 2 1
-
合并式
[root@node01 export]# cat 3.txt | sort -nr 11 10 9 8 7 6 5 4 3 2 1
第四步: 对成绩排序
参数 | 英文 | 含义 |
---|---|---|
-t |
field-separator | 指定字段分隔符 |
-k |
key | 根据那一列排序 |
-
准备工作
cd /export vim 4.txt
zhangsan 68 99 26 lisi 98 66 96 wangwu 38 33 86 zhaoliu 78 44 36 maqi 88 22 66 zhouba 98 44 46
-
练习: 根据第二段成绩 进行倒序显示 所有内容
[root@node01 export]# cat 4.txt zhangsan 68 99 26 lisi 98 66 96 wangwu 38 33 86 zhaoliu 78 44 36 maqi 88 22 66 zhouba 98 44 46 [root@node01 export]# cat 4.txt | sort -t ' ' -k 2 wangwu 38 33 86 zhangsan 68 99 26 zhaoliu 78 44 36 maqi 88 22 66 zhouba 98 44 46 lisi 98 66 96 [root@node01 export]# cat 4.txt | sort -t ' ' -k 2 -n -r zhouba 98 44 46 lisi 98 66 96 maqi 88 22 66 zhaoliu 78 44 36 zhangsan 68 99 26 wangwu 38 33 86
2.4 小结
- 通过
sort 选项 文件
可以对文件内容进行排序
3 wc命令
3.1 目标
- 显示指定文件 字节数, 单词数, 行数 信息.
3.2 路径
- 第一步: 显示指定文件 字节数, 单词数, 行数 信息.
- 第二步: 只显示 文件 的行数
- 第三步: 统计多个文件的 行数 单词数 字节数
- 第四步: 查看
/etc
目录下 有多少个 子内容
3.3 实现
第一步: 显示指定文件 字节数, 单词数, 行数 信息.
命令 | 含义 |
---|---|
wc 文件名 | 显示指定文件 字节数, 单词数, 行数 信息 |
-
准备工作
cd /export/ vim 5.txt
111 222 bbb 333 aaa bbb 444 aaa bbb ccc 555 aaa bbb ccc ddd 666 aaa bbb ccc ddd eee
-
练习: 显示指定文件 字节数, 单词数, 行数 信息.
[root@node01 export]# wc 5.txt
6 21 85 5.txt
[root@node01 export]# cat 5.txt
111
222 bbb
333 aaa bbb
444 aaa bbb ccc
555 aaa bbb ccc ddd
666 aaa bbb ccc ddd eee
[root@node01 export]# cat 5.txt | wc
6 21 85
第二步: 只显示 文件 的行数
参数 | 英文 | 含义 |
---|---|---|
-c |
bytes | 字节数 |
-w |
words | 单词数 |
-l |
lines | 行数 |
[root@node01 export]# cat 5.txt
111
222 bbb
333 aaa bbb
444 aaa bbb ccc
555 aaa bbb ccc ddd
666 aaa bbb ccc ddd eee
You have new mail in /var/spool/mail/root
[root@node01 export]# cat 5.txt | wc
6 21 85
[root@node01 export]# cat 5.txt | wc -l
6
第三步: 统计多个文件的 行数 单词数 字节数
[root@node01 export]# wc 2.txt 3.txt 4.txt 5.txt
5 5 30 2.txt
11 11 24 3.txt
6 24 94 4.txt
6 21 85 5.txt
28 61 233 total
[root@node01 export]# wc *.txt
5 5 30 2.txt
11 11 24 3.txt
6 24 94 4.txt
6 21 85 5.txt
28 61 233 total
第四步: 查看 /etc
目录下 有多少个 子内容
ll /etc | wc -l
3.4 小结
- 通过
wc 文件
就可以 统计 文件的 字节数、单词数、行数.
4 uniq
uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。
4.1 目标
4.2路径
- 第一步:实现去重效果
- 第二步:不但去重,还要 统计出现的次数
4.3 实现
第一步:实现去重效果
命令 | 英文 | 含义 |
---|---|---|
uniq [参数] 文件 |
unique 唯一 | 去除重复行 |
-
准备工作
cd /export/ vim 6.txt
张三 98 李四 100 王五 90 赵六 95 麻七 70 李四 100 王五 90 赵六 95 麻七 70
-
需求: 实现去重效果
-
[root@node01 export]# cat 6.txt 张三 98 李四 100 王五 90 赵六 95 麻七 70 李四 100 王五 90 赵六 95 麻七 70 [root@node01 export]# cat 6.txt | sort 张三 98 李四 100 李四 100 王五 90 王五 90 赵六 95 赵六 95 麻七 70 麻七 70 [root@node01 export]# cat 6.txt | sort | uniq 张三 98 李四 100 王五 90 赵六 95 麻七 70
第二步:不但去重,还要 统计出现的次数
参数 | 英文 | 含义 |
---|---|---|
-c |
count | 统计每行内容出现的次数 |
[root@node01 export]# cat 6.txt | sort | uniq -c
1 张三 98
2 李四 100
2 王五 90
2 赵六 95
2 麻七 70
4.4 小结
- 通过
uniq [选项] 文件
就可以完成 去重行 和 统计次数
5 tee
5.1 目标
- 通过
tee
可以将命令结果 通过管道 输出到 多个文件中
5.2 实现
命令 | 含义 |
---|---|
命令结果 | tee 文件1 文件2 文件3 | 通过 tee 可以将命令结果 通过管道 输出到 多个文件中 |
-
将去重统计的结果 放到 a.txt、b.txt、c.txt 文件中
[root@node01 export]# ls 2.txt 3.txt 4.txt 5.txt 6.txt [root@node01 export]# cat 6.txt | sort | uniq -c | tee a.txt b.txt c.txt 1 张三 98 2 李四 100 2 王五 90 2 赵六 95 2 麻七 70 [root@node01 export]# ls 2.txt 3.txt 4.txt 5.txt 6.txt a.txt b.txt c.txt [root@node01 export]# cat a.txt 1 张三 98 2 李四 100 2 王五 90 2 赵六 95 2 麻七 70
5.3 小结
- 通过
tee
可以将命令结果 通过管道 输出到 多个文件中
6 tr
6.1 目标
- 通过
tr
命令用于 替换 或 删除 文件中的字符。
6.2 路径
- 第一步: 实现 替换 效果
- 第二步: 实现 删除 效果
- 第三步: 完成 单词计数 案例
6.3 实现
第一步: 实现 替换效果
命令 | 英文 | 含义 |
---|---|---|
命令结果 | tr 被替换的字符 新字符 | translate | 实现 替换效果 |
-
准备工作
cd /export vim 7.txt
itheima HELLO abc1d4e5f
-
需求:
# 将 小写i 替换成 大写 I # 把 小写 的转换为大写 # 把 大写 转成 小写
[root@node01 export]# cat 7.txt
itheima
HELLO
abc1d4e5f
[root@node01 export]# cat 7.txt | tr 'i' 'I'
ItheIma
HELLO
abc1d4e5f
[root@node01 export]# cat 7.txt | tr [a-z] [A-Z]
ITHEIMA
HELLO
ABC1D4E5F
You have new mail in /var/spool/mail/root
[root@node01 export]# cat 7.txt | tr [A-Z] [a-z]
itheima
hello
abc1d4e5f
第二步: 实现删除效果
命令 | 英文 | 含义 |
---|---|---|
命令结果 | tr -d 被删除的字符 | delete | 删除指定的字符 |
- 需求: 删除abc1d4e5f中的数字
echo 'abc1d4e5f' | tr -d [0-9]
第三步: 单词计数
-
准备工作
cd /export vim 8.txt
hello,world,hadoop hive,sqoop,flume,hello kitty,tom,jerry,world hadoop
分析:
1 将, 换成 换行 2 排序 3 去重 4 计数
-------- 查看文件内容 [root@node01 export]# cat 8.txt hello,world,hadoop hive,sqoop,flume,hello kitty,tom,jerry,world hadoop -------- 将 逗号, 替换成 换行符 [root@node01 export]# cat 8.txt | tr ',' '\n' hello world hadoop hive sqoop flume hello kitty tom jerry world hadoop -------- 排序 [root@node01 export]# cat 8.txt | tr ',' '\n' | sort flume hadoop hadoop hello hello hive jerry kitty sqoop tom world world -------- 去重 [root@node01 export]# cat 8.txt | tr ',' '\n' | sort | uniq flume hadoop hello hive jerry kitty sqoop tom world -------- 计数 [root@node01 export]# cat 8.txt | tr ',' '\n' | sort | uniq -c 1 flume 2 hadoop 2 hello 1 hive 1 jerry 1 kitty 1 sqoop 1 tom 2 world [root@node01 export]#
6.4 小结
-
通过
tr [选项] 字符1 字符2
可以 实现 替换 和 删除 效果 -
准备工作
# 清空目录内容 cd /export/ && rm -rf * # 查看 /etc目录下 以.conf以结尾的文件的内容 cat -n /etc/*.conf # 将命令结果 追加到 /export/v.txt 文件中 cat -n /etc/*.conf >> /export/v.txt # 查看文件内容 ls # 查看新文件的行数 wc -l v.txt
7 split
7.1 目标
- 通过
split
命令将大文件 切分成 若干小文件
7.2 路径
- 第一步: 按 字节 将 大文件 切分成 若干小文件
- 第二步: 按 行数 将 大文件 切分成 若干小文件
7.3 实现
第一步: 按 字节 将 大文件 切分成 若干小文件
命令 | 英文 | 含义 |
---|---|---|
split -b 10k 文件 | byte | 将大文件切分成若干10KB的小文件 |
[root@node01 export]# ll -h
total 108K
-rw-r--r-- 1 root root 105K Jul 12 20:35 v.txt
[root@node01 export]# split -b 20k v.txt
[root@node01 export]# ll
total 216
-rw-r--r-- 1 root root