『忘了再學』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選項指定空格作為分隔符,如下:

image

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

所以不推薦空格作為cut命令的分隔符。

總結一下:

  • cut命令的默認分隔符是製表符,也就是tab鍵,對空格作為分隔符是支持的,但是不怎麼好用,不推薦使用。
  • 如果需要用空格來截取文本數據,可以用後邊講的awk來進行截取。