按列抽取文本命令之cut

cut

与全文浏览工具cat不同,也与head,tail这些取文本中的列的命令不同。

cut命令用来取文本中的列。

[03:19:05 root@C8-3-55 ~]#cut --help
用法:cut [选项]... [文件]...
Print selected parts of lines from each FILE to standard output.

如果没有指定文件,或者文件为"-",则从标准输入读取。

必选参数对长短选项同时适用。
  -b, --bytes=列表              只选中指定的这些字节
  -c, --characters=列表         只选中指定的这些字符
  -d, --delimiter=分界符        使用指定分界符代替制表符作为区域分界
  -f, --fields=LIST       select only these fields;  also print any line
                            that contains no delimiter character, unless
                            the -s option is specified
  -n                      with -b: don't split multibyte characters
      --complement              补全选中的字节、字符或域
  -s, --only-delimited          不打印没有包含分界符的行
      --output-delimiter=字符串 使用指定的字符串作为输出分界符,默认采用输入
                                的分界符
  -z, --zero-terminated    以 NUL 字符而非换行符作为行尾分隔符
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

仅使用f -b, -c 或-f 中的一个。每一个列表都是专门为一个类别作出的,或者您可以用逗号隔
开要同时显示的不同类别。您的输入顺序将作为读取顺序,每个仅能输入一次。
Each range is one of:

  N     N'th byte, character or field, counted from 1
  N-    from N'th byte, character or field, to end of line
  N-M   from N'th to M'th (included) byte, character or field
  -M    from first to M'th (included) byte, character or field

用cut命令-d选项将想要的内容从文本中过滤出来

例:用cut命令取出passwd中的用户名和uid

  • -d: 以 : 做为列的分隔符
  • -f 1,3 分别取第1和第3列

cut: 分界符必须是单个字符

[03:25:10 root@C8-3-55 ~]#head -n 5 /etc/passwd | cut -d: -f 1,3
root:0
bin:1
daemon:2
adm:3
lp:4

利用 cut -d 取出磁盘使用率的值,方便以后磁盘报警。

  • tr -s ' ' % 将空格替换成%
  • cut -d % -f 5 以%为分隔符的列取第五列
  • tail -n +2 显示从第二行开始的内容
[03:39:35 root@C8-3-55 ~]#df -h
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             886M     0  886M    0% /dev
tmpfs                903M     0  903M    0% /dev/shm
tmpfs                903M   17M  886M    2% /run
tmpfs                903M     0  903M    0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  3.4G   14G   20% /
/dev/sda1            976M  139M  771M   16% /boot
tmpfs                181M     0  181M    0% /run/user/0
[03:41:07 root@C8-3-55 ~]#df -h | tr -s ' ' % | cut -d % -f 5 |tail -n +2
0
0
2
0
20
16
0

cut命令-c选项用字符来分割

例:利用cut -c 取出磁盘可用空间

  • -c 22-25 22到25列的范围内容
[03:36:45 root@C8-3-55 ~]#df -h
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             886M     0  886M    0% /dev
tmpfs                903M     0  903M    0% /dev/shm
tmpfs                903M   17M  886M    2% /run
tmpfs                903M     0  903M    0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  3.4G   14G   20% /
/dev/sda1            976M  139M  771M   16% /boot
tmpfs                181M     0  181M    0% /run/user/0

[03:39:20 root@C8-3-55 ~]#df -h | cut -c 22-25
已用
886M
903M
903M
903M
 17G
976M
181M

利用--output-delimiter选项可以替换列间分割符

例:计算1连加到100和1连乘到10

[03:51:42 root@C8-3-55 ~]#echo {1..100} | cut -d ' ' -f 1-100 --output-delimiter="+"| bc
5050
[03:45:41 root@C8-3-55 ~]#echo {1..10} | cut -d ' ' -f 1-10 --output-delimiter="*"
1*2*3*4*5*6*7*8*9*10
[03:50:15 root@C8-3-55 ~]#echo {1..10} | cut -d ' ' -f 1-10 --output-delimiter="*"| bc
3628800

检查以下,计算正确

[03:55:08 root@C8-3-55 ~]#seq -s + 100
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[03:55:39 root@C8-3-55 ~]#seq -s + 100 | bc
5050
[03:56:13 root@C8-3-55 ~]#seq -s '*' 10
1*2*3*4*5*6*7*8*9*10
[03:56:30 root@C8-3-55 ~]#seq -s '*' 10 | bc
3628800
上一篇:剑指 Offer 55 - II. 平衡二叉树


下一篇:mariadb galera cluster 中的节点宕机日志解释以及如何避免ddl造成集群范围ha