8.1 cut
cut 的工作就是 "剪", 具体的说就是在文件中负责剪切数据用的. cut 命令从文件的每一行剪切字节, 字符和字段并将这些字节, 字符和字段输出.
1. 基本用法
cut [选项参数] filename
说明: 默认分隔符是制表符
2. 选项参数说明
表 1-55
选项参数 | 功能 |
-f | 列号,提取第几列 |
-d | 分隔符,按照指定分隔符分割列 |
3. 案例实操
(0) 数据准备
- [atguigu@hadoop101 datas]$ touch cut.txt
- [atguigu@hadoop101 datas]$ VIM cut.txt
- dong shen
- guan zhen
- wo wo
- lai lai
- le le
(1) 切割 cut.txt 第一列
- [atguigu@hadoop101 datas]$ cut -d " " -f 1 cut.txt
- dong
- guan
- wo
- lai
- le
(2) 切割 cut.txt 第二, 三列
- [atguigu@hadoop101 datas]$ cut -d " " -f 2,3 cut.txt
- shen
- zhen
- wo
- lai
- le
(3) 在 cut.txt 文件中切割出 guan
- [atguigu@hadoop101 datas]$ cat cut.txt | grep "guan" | cut -d " " -f 1
- guan
(4) 选取系统 PATH 变量值, 第 2 个 ":" 开始后的所有路径:
- [atguigu@hadoop101 datas]$ echo $PATH
- /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin
- [atguigu@hadoop102 datas]$ echo $PATH | cut -d: -f 2-
- /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin
(5) 切割 ifconfig 后打印的 IP 地址
- [atguigu@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d: -f 2 | cut -d" " -f1
- 192.168.1.102
- 8.2 sed
sed 是一种流编辑器, 它一次处理一行内容. 处理时, 把当前处理的行存储在临时缓冲区中, 称为 "模式空间", 接着用 sed 命令处理缓冲区中的内容, 处理完成后, 把缓冲区的内容送往屏幕. 接着处理下一行, 这样不断重复, 直到文件末尾. 文件内容并没有改变, 除非你使用重定向存储输出.
基本用法
sed [选项参数] 'command' filename
选项参数说明
表 1-56
选项参数 | 功能 |
-e | 直接在指令列模式上进行 sed 的动作编辑。 |
命令功能描述
表 1-57
命令 | 功能描述 |
a | 新增,a 的后面可以接字串,在下一行出现 |
d | 删除 |
s | 查找并替换 |
案例实操
(0) 数据准备
- [atguigu@hadoop102 datas]$ touch sed.txt
- [atguigu@hadoop102 datas]$ VIM sed.txt
- dong shen
- guan zhen
- wo wo
- lai lai
- le le
(1) 将 "mei nv" 这个单词插入到 sed.txt 第二行下, 打印.
- [atguigu@hadoop102 datas]$ sed '2a mei nv' sed.txt
- dong shen
- guan zhen
- mei nv
- wo wo
- lai lai
- le le
- [atguigu@hadoop102 datas]$ cat sed.txt
- dong shen
- guan zhen
- wo wo
- lai lai
- le le
注意: 文件并没有改变
(2) 删除 sed.txt 文件所有包含 wo 的行
- [atguigu@hadoop102 datas]$ sed '/wo/d' sed.txt
- dong shen
- guan zhen
- lai lai
- le le
(3) 将 sed.txt 文件中 wo 替换为 ni
- [atguigu@hadoop102 datas]$ sed 's/wo/ni/g' sed.txt
- dong shen
- guan zhen
- ni ni
- lai lai
- le le
注意:'g'表示 global, 全部替换
(4) 将 sed.txt 文件中的第二行删除并将 wo 替换为 ni
- [atguigu@hadoop102 datas]$ sed -e '2d' -e 's/wo/ni/g' sed.txt
- dong shen
- ni ni
- lai lai
- le le
- 8.3 awk
一个强大的文本分析工具, 把文件逐行的读入, 以空格为默认分隔符将每行切片, 切开的部分再进行分析处理.
基本用法
awk [选项参数] 'pattern1{action1} pattern2{action2}...'filename
pattern: 表示 AWK 在数据中查找的内容, 就是匹配模式
action: 在找到匹配内容时所执行的一系列命令
选项参数说明
表 1-55
选项参数 | 功能 |
-F | 指定输入文件折分隔符 |
-v | 赋值一个用户定义变量 |
案例实操
(0) 数据准备
[atguigu@hadoop102 datas]$ sudo cp /etc/passwd ./
(1) 搜索 passwd 文件以 root 关键字开头的所有行, 并输出该行的第 7 列.
- [atguigu@hadoop102 datas]$ awk -F: '/^root/{print $7}' passwd
- /bin/bash
(2) 搜索 passwd 文件以 root 关键字开头的所有行, 并输出该行的第 1 列和第 7 列, 中间以 "," 号分割.
- [atguigu@hadoop102 datas]$ awk -F: '/^root/{print $1","$7}' passwd
- root,/bin/bash
注意: 只有匹配了 pattern 的行才会执行 action
(3) 只显示 / etc/passwd 的第一列和第七列, 以逗号分割, 且在所有行前面添加列名 user,shell 在最后一行添加 "dahaige,/bin/zuishuai".
- [atguigu@hadoop102 datas]$ awk -F : 'BEGIN{print"user, shell"} {print $1","$7} END{print"dahaige,/bin/zuishuai"}' passwd
- user, shell
- root,/bin/bash
- bin,/sbin/nologin
- ...
- atguigu,/bin/bash
- dahaige,/bin/zuishuai
注意: BEGIN 在所有数据读取行之前执行; END 在所有数据执行之后执行.
(4) 将 passwd 文件中的用户 id 增加数值 1 并输出
- [atguigu@hadoop102 datas]$ awk -v i=1 -F: '{print $3+i}' passwd
- 1
- 2
- 3
- 4
awk 的内置变量
表 1-56
变量 | 说明 |
FILENAME | 文件名 |
NR | 已读的记录数 |
NF | 浏览记录的域的个数(切割后,列的个数) |
案例实操
(1) 统计 passwd 文件名, 每行的行号, 每行的列数
- [atguigu@hadoop102 datas]$ awk -F: '{print"filename:"FILENAME", linenumber:"NR",columns:"NF}' passwd
- filename:passwd, linenumber:1,columns:7
- filename:passwd, linenumber:2,columns:7
- filename:passwd, linenumber:3,columns:7
(2) 切割 IP
- [atguigu@hadoop102 datas]$ ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk -F ""'{print $1}'
- 192.168.1.102
(3) 查询 sed.txt 中空行所在的行号
- [atguigu@hadoop102 datas]$ awk '/^$/{print NR}' sed.txt
- 5
- 8.4 sort
sort 命令是在 Linux 里非常有用, 它将文件进行排序, 并将排序结果标准输出.
基本语法
sort(选项)(参数)
表 1-57
选项 | 说明 |
-n | 依照数值的大小排序 |
-r | 以相反的顺序来排序 |
-t | 设置排序时所用的分隔字符 |
-k | 指定需要排序的列 |
参数: 指定待排序的文件列表
2. 案例实操
(0) 数据准备
- [atguigu@hadoop102 datas]$ touch sort.sh
- [atguigu@hadoop102 datas]$ VIM sort.sh
- bb:40:5.4
- bd:20:4.2
- xz:50:2.3
- cls:10:3.5
- ss:30:1.6
(1) 按照 ":" 分割后的第三列倒序排序.
- [atguigu@hadoop102 datas]$ sort -t : -nrk 3 sort.sh
- bb:40:5.4
- bd:20:4.2
- cls:10:3.5
- xz:50:2.3
- ss:30:1.6
来源: http://www.bubuko.com/infodetail-2984540.html