『忘了再学』Shell基础 — 26、cut列提取命令

1、cut命令说明

cut命令的作用是对文本中的内容进行截取。

一个文件里边有很多数据,grep命令是用来提取文本内容包含匹配规则的行,而cut命令是用来截取文本内容中的列数据。

[root@localhost ~]# cut [选项] 文件名  选项:   -f 列号:提取第几列。   -d 分隔符:按照指定分隔符分割列,默认分隔符是制表符(tab键)。   -c 字符范围:不依赖分隔符来区分列,而是通过字符范围(行首为0)来进行字段提取。         “n-”表示截取所有行从第n个字符到行尾;         “n-m”表示截取所有行从第n个字符到第m个字符;         “-m”表示截取所有行从第1个字符到第m个字符。 

2、cut命令练习

使用如下文本:

ID      Name    Gender  Mark 1       Tangs   M       88 2       Sunwk   M       99 3       Zhubj   M       77 4       Shahs   M       66 

(1)cut命令基本用法

使用cut命令提取student.txt文本中的第二列信息。

# 提取文本中第二列内容 [root@localhost tmp]# cut -f 2 student.txt Name Tangs Sunwk Zhubj Shahs  

如果只需要第二列信息,且不需要标题,就需要结合前边说的grep命令一起使用了。

[root@localhost tmp]# grep -v "Name" student.txt | cut -f 2 Tangs Sunwk Zhubj Shahs 

(2)cut命令选取多列

如果想要提取文本中多列数据,只要将列号直接用,(逗号)分开即可,命令如下:

[root@localhost tmp]# cut -f 2,4 student.txt Name    Mark Tangs   88 Sunwk   99 Zhubj   77 Shahs   66 

(3)按字符来进行提取

cut命令可以按照字符进行提取,需要注意8-代表的是提取所有行的第十个字符开始到行尾,而
10-20代表提取所有行的第10个字符到第20个字符,而-8代表提取所有行从行首到第8个字符。

[root@localhost tmp]# cut -c -6 student.txt ID  Nam 1   Tang 2   Sunw 3   Zh 4   Shah  

注意:在实际工作中,这种方式很难提取出合理的数据信息,除非格式非常的规律,因为每行的字符个数不相等,截取出来的内容会不完整。

(4)按指定分隔符进行截取数据

例如:以:作为分隔符,提取/etc/passwd文件中,普通用户的第一列和第三列数据信息。

需要先过滤掉伪用户和root用户,在切割提取。

# 过滤伪用户 # grep "/bin/bash" /etc/passwd  # 过滤root用户 # grep -v "root" /etc/passwd  # 执行命令 [root@localhost tmp]# grep "/bin/bash" /etc/passwd | grep -v "root" | cut -d ":" -f 1,3 user1:500 user2:501  

之后我们就可以把这些提取出来的数据,传入变量中,然后该变量就可以在程序中进行操作了。

3、cut命令分隔符说明

cut命令默认分隔符是制表符(tab键),而不是使用空格来进行分隔,因为cut命令不识别空格作为分隔符。

如果有特定的符号,也是可以用-d选项进行指定做为分隔符。

而空格不推荐作为cut命令的分隔符。

如查看磁盘情况的df命令:

[root@192 localhost]# df -h Filesystem      Size  Used Avail Use% Mounted on /dev/sda3        19G  2.1G   16G  12% / tmpfs           491M     0  491M   0% /dev/shm /dev/sda1       240M   34M  194M  15% /boot 

这个命令中间的分隔就是空格。

如我们通过cut命令获取二列信息,如下:

[root@192 localhost]# df -h | cut -f 2 Filesystem      Size  Used Avail Use% Mounted on /dev/sda3        19G  2.1G   16G  12% / tmpfs           491M     0  491M   0% /dev/shm /dev/sda1       240M   34M  194M  15% /boot 

我们看到cut命令默认是不识别空格作为分隔符的。

如果我们用-d选项指定空格作为分隔符,如下:

『忘了再学』Shell基础 — 26、cut列提取命令

可以看到获取的是一列空格,也非常的不好用。

所以不推荐空格作为cut命令的分隔符。

总结一下:

  • cut命令的默认分隔符是制表符,也就是tab键,对空格作为分隔符是支持的,但是不怎么好用,不推荐使用。
  • 如果需要用空格来截取文本数据,可以用后边讲的awk来进行截取。
发表评论

相关文章