shell工具cut、sed、awk、sort1、cut2、sed3、awk4、sort
1、cut描述:
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
- 基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
选项参数说明
| 项参数 | 功能 |
|---|---|
| -f | 列号,提取第几列 |
| -d | 分隔符,按照指定分隔符分割列 |
操作案例:
(0)数据准备
[root@bigdata01 centos-shell]# cat cut.txt chen wei ting xu ya dong zhong guan cun bei jing shi xie ting feng wang ya li
(1)切割cut.txt第一列
[root@bigdata01 centos-shell]# cut -d " " -f 1 cut.txt chen xu zhong bei xie wang
(2)切割cut.txt第二、三列
[root@bigdata01 centos-shell]# cut -d " " -f 2,3 cut.txt wei ting ya dong guan cun jing shi ting feng ya li
(3)在cut.txt文件中切割出guan
[root@bigdata01 centos-shell]# cat cut.txt | grep "xie" | cut -d " " -f 1 xie
(4)选取系统PATH变量值,第15个“:”开始后的所有路径:
[root@bigdata01 centos-shell]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/module/ jdk1.8.0_171/bin:/opt/module/jdk1.8.0_171/jre/bin:/opt/module/ hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/opt/module/ hbase-2.0.3/bin:/opt/module/sqoop/bin:/opt/module/zookeeper- 3.4.5/bin:/opt/module/kafka/bin:/opt/module/flume/bin:/opt/ module/hive/bin:/opt/module/jdk1.8.0_171/bin:/opt/module/ jdk1.8.0_171/jre/bin:/opt/module/hadoop-2.7.2/bin:/opt/ module/hadoop-2.7.2/sbin:/opt/module/hbase- 2.0.3/bin:/opt/module/sqoop/bin:/opt/module/zookeeper- 3.4.5/bin:/opt/module/kafka/bin:/opt/module/flume/ bin:/opt/module/hive/bin:/root/bin [root@bigdata01 centos-shell]# echo $PATH | cut -d: -f 15- /opt/module/jdk1.8.0_171/bin:/opt/module/jdk1.8.0_171/jre/bin:/opt/ module/hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/opt/module/hbase- 2.0.3/bin:/opt/module/sqoop/bin:/opt/module/zookeeper- 3.4.5/bin:/opt/module/kafka/bin:/opt/module/flume/bin:/opt/ module/hive/bin:/root/bin
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
基本用法
sed [选项参数] ‘command’ filename
选项参数说明
| 项参数 | 功能 |
|---|---|
| -e | 直接在指令列模式上进行sed的动作编辑 |
命令功能描述
| 命令 | 功能描述 |
|---|---|
| a | 新增,a的后面可以接字串,在下一行出现 |
| d | 删除 |
| s | 查找并替换 |
案例操作
(0)数据准备
[root@bigdata01 centos-shell]# cat cut.txt chen wei ting xu ya dong zhong guan cun bei jing shi xie ting feng wang ya li
(1)将“mei nv”这个单词插入到sed.txt第二行的下一行,打印。
[root@bigdata01 centos-shell]# sed '2a mei mei' sed.txt chen wei ting xu ya dong mei mei zhong guan cun bei jing shi xie ting feng wang ya li [root@bigdata01 centos-shell]# cat sed.txt chen wei ting xu ya dong zhong guan cun bei jing shi xie ting feng wang ya li
注意:文件并没有改变
(2)删除sed.txt文件所有包含wo的行
[root@bigdata01 centos-shell]# sed '/wang/d' sed.txt chen wei ting xu ya dong zhong guan cun bei jing shi xie ting feng
(3)将sed.txt文件中wo替换为ni
[root@bigdata01 centos-shell]# sed 's/wang/xu/g' sed.txt chen wei ting xu ya dong zhong guan cun bei jing shi xie ting feng xu ya li
注意:‘g’表示global,全部替换
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
- 基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数说明
| 选项参数 | 功能 |
|---|---|
| -F | 指定输入文件折分隔符 |
| -v | 赋值一个用户定义变量 |
案例实操
(0)数据准备
[root@bigdata01 centos-shell]# vi awk.txt [root@bigdata01 centos-shell]# cat awk.txt root 1 work blask dadf fdafd gerq qefad fdae root 2 fdaqe eqfda fqef eqf fqdf 89 fefq root 3 fadff fqfda qfda efqdad ef 98455 efad root 4 dfaf efda efad fadfdq feghy 89413 efqe
(1)搜索awk.txt文件以root关键字开头的所有行,并输出该行的第5列。
[root@bigdata01 centos-shell]# awk -F " " '/^root/{print $5}' awk.txt /bin/bash
dadf
fqef
qfda
efad
(2)搜索awk.txt文件以root关键字开头的所有行,并输出该行的第3列和第6列,中间以“,”号分割。
[root@bigdata01 centos-shell]# awk -F " " '/^root/{print $2","$6}' awk.txt /bin/bash
hello,fdafd
opfa,eqf
cxae,efqdad
dace,fadfdq
注意:只有匹配了pattern的行才会执行action
(3) 将awk.txt文件中的用户id增加数值1并输出
[root@bigdata01 centos-shell]# awk -v i=1 -F " " '{print $2+i}' awk.txt
2
3
4
5
awk的内置变量
| 变量 | 说明 |
|---|---|
| FILENAME | 文件名 |
| NR | 已读的记录数 |
| NF | 浏览记录的域的个数(切割后,列的个数) |
案例实操
(1)统计awk.txt文件名,每行的行号,每行的列数
[root@bigdata01 centos-shell]# awk -F " " '{print "filename:" FILENAME ", linenumber:" NR ",columns:" NF}' awk.txt
filename:awk.txt, linenumber:1,columns:9
filename:awk.txt, linenumber:2,columns:9
filename:awk.txt, linenumber:3,columns:9
filename:awk.txt, linenumber:4,columns:9
(2) 查询sed.txt中空行所在的行号
[root@bigdata01 centos-shell]# awk '/^$/{print NR}' sed.txt
2
5
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
基本语法
sort(选项)(参数)
| 选项 | 说明 |
|---|---|
| -n | 依照数值的大小排序 |
| -r | 以相反的顺序来排序 |
| -t | 设置排序时所用的分隔字符 |
| -k | 指定需要排序的列 |
参数:指定待排序的文件列表
案例实操
(0)数据准备
[root@bigdata01 centos-shell]# vi sort.sh bb:40:5.4 bd:20:4.2 xz:50:2.3 cls:10:3.5 ss:30:1.6
(1)按照“:”分割后的第三列倒序排序。
[root@bigdata01 centos-shell]# 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



