05 文本处理工具 cut、paste 、跟踪磁盘分区利用率 20210310 (三)
一、按列抽取文本cut
cut选项:
-d DELIMITER: 指明分隔符,默认tab -f FILEDS: #: 第#个字段,例如:3 #,#[,#]:离散的多个字段,例如:1,3,6 #-#:连续的多个字段, 例如:1-6 混合使用:1-3,7 -c 按字符切割 --output-delimiter=STRING指定输出分隔符
案例1:取出文件中的特定内容
1 [01:55:12 root@localhost ~]#who 2 root pts/0 2021-03-10 00:02 (192.168.253.233)
1 [01:55:28 root@localhost ~]# cat /etc/passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 sync:x:5:0:sync:/sbin:/bin/sync 8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9 halt:x:7:0:halt:/sbin:/sbin/halt 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 operator:x:11:0:operator:/root:/sbin/nologin 12 games:x:12:100:games:/usr/games:/sbin/nologin 13 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 14 nobody:x:99:99:Nobody:/:/sbin/nologin 15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16 dbus:x:81:81:System message bus:/:/sbin/nologin 17 polkitd:x:999:998:User for polkitd:/:/sbin/nologin 18 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 19 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
,
#取值 取出用户名,ID等信息
1 [02:01:29 root@localhost ~]#cut -d : -f1,3-5 /etc/passwd 2 root:0:0:root 3 bin:1:1:bin 4 daemon:2:2:daemon 5 adm:3:4:adm 6 lp:4:7:lp 7 sync:5:0:sync 8 shutdown:6:0:shutdown 9 halt:7:0:halt 10 mail:8:12:mail 11 operator:11:0:operator 12 games:12:100:games 13 ftp:14:50:FTP User 14 nobody:99:99:Nobody 15 systemd-network:192:192:systemd Network Management 16 dbus:81:81:System message bus 17 polkitd:999:998:User for polkitd 18 sshd:74:74:Privilege-separated SSH 19 postfix:89:89:
两种写法
[01:56:17 root@localhost ~]# cat /etc/passwd|head -n 5|cut -d : -f 1,3-5 root:0:0:root bin:1:1:bin daemon:2:2:daemon adm:3:4:adm lp:4:7:lp
#取值,只要用户名
1 [02:01:40 root@localhost ~]#cut -d : -f1 /etc/passwd 2 root 3 bin 4 daemon 5 adm 6 lp 7 sync 8 shutdown 9 halt 10 mail 11 operator 12 games 13 ftp 14 nobody 15 systemd-network 16 dbus 17 polkitd 18 sshd 19 postfix
案例2:取出使用硬盘空间的数据,跟踪磁盘分区利用率
[root@rocky8 ~]#df
方法1#从第44-46个字符,取出分区利用率
从第二行开始取值
[root@rocky8 ~]#df |tail -n +2
[ root@rocky8 ~]#df |tail -n +2 |cut -c44-46
剪切第44-46行的内容
方法2 #空格压缩后再去提取,取第五列的值
[root@rocky8 ~]#df
[root@rocky8 ~]#df |tr -s ' '
[root@rocky8 ~]#df |tr -s ' '|tail -n +2
取值,取第五行内容
[root@rocky8 ~]#df |tr -s ' '|tail -n +2 |cut -d' ' -f5
继续取值,去掉%;
[root@rocky8 ~]#df |tr -s ' '|tail -n +2 |cut -d' ' -f5|tr -d %
方法3#空格压缩用%替代,用%作为分隔符取值
1 [02:19:06 root@CentOS8 ~]#df |tr -s " " "%" 2 Filesystem%1K-blocks%Used%Available%Use%Mounted%on 3 devtmpfs%1880616%0%1880616%0%/dev 4 tmpfs%1898924%0%1898924%0%/dev/shm 5 tmpfs%1898924%9080%1889844%1%/run 6 tmpfs%1898924%0%1898924%0%/sys/fs/cgroup 7 /dev/sda3%104806400%2481444%102324956%3%/ 8 /dev/sda2%1038336%170496%867840%17%/boot 9 /dev/sda1%52415968%7296%52408672%1%/boot/efi 10 tmpfs%379784%0%379784%0%/run/user/0 11 [02:19:24 root@CentOS8 ~]#df |tr -s " " "%"|cut -d% -f5 12 Use 13 0 14 0 15 1 16 0 17 3 18 17 19 1 20 0
取值完成,但是我们发现还有不想要的内容(use),怎么办?
从第二行开始往后取值:
1 [02:24:59 root@CentOS8 ~]#df |tr -s " " "%"|cut -d% -f5|tail -n +2 2 0 3 0 4 1 5 0 6 3 7 17 8 1 9 0
二、合并多个文件 paste
paste常用选项:
-d 分隔符:指定分隔符,默认用TAB -s : 所有行合成一行显示
使用tr ' ' '\n'
[root@rocky8 ~]#echo {1..10}
[root@rocky8 ~]#echo {1..10} |tr ' ' '\n'