最新評論 linux命令--cut的使用

cut 是一個選取命令,將一段數據進行分析,取得我們想要的

語法:

cut (參數)(文件)

常用參數:

-b:僅顯示行中指定直接範圍的內容;(以字節爲單位分割)

-c:僅顯示行中指定範圍的字符;(以字符爲單位分割)

-d:指定字段的分隔符,默認的字段分隔符爲“TAB”;

-f:顯示指定字段的內容; (以字段爲分隔符)

-n:與“-b”選項連用,不分割多字節字符;

--complement:補足被選擇的字節、字符或字段;

--out-delimiter=<字段分隔符>:指定輸出內容是的字段分割符;

--help:顯示指令的幫助信息;

--version:顯示指令的版本信息。

cut命令主要是接受三個定位方法:

第一,字節(bytes),用選項-b

第二,字符(characters),用選項-c

第三,域(fields),用選項-f

1、以“字節”定位

[root@xiaojin oldboy]# who
root pts/1 2019-01-08 20:27 (10.0.0.1)
[root@xiaojin oldboy]# who|cut -b 3
o

如果“字節”定位中,我想提取第3,第4、第5和第8個字節,怎麼辦?

-b支持形如3-5的寫法,而且多個定位之間用逗號隔開就成了。

[root@xiaojin oldboy]# who

root pts/1 2019-01-08 20:27 (10.0.0.1)

[root@xiaojin oldboy]# who|cut -b 3-5,10
ot p

注意:cut命令如果使用了-b選項,那麼執行此命令時,cut會先把-b後面所有的定位進行從小到大排序,然後再提取。可不能顛倒定位的順序哦。如下:

[root@xiaojin oldboy]# who|cut -b 3-5,10
ot p
[root@xiaojin oldboy]# ^C
[root@xiaojin oldboy]# who|cut -b 10,3-5
ot p

還有哪些類似-3,3-這樣的寫法,如下

[root@xiaojin oldboy]# who|cut -b -3
roo
[root@xiaojin oldboy]# who|cut -b 3-
ot pts/1 2019-01-08 20:27 (10.0.0.1)

-3表示從第一個字節到第三個字節,而3-表示從第三個字節到行尾。

如果我執行who|cut -b -3,3-,會輸出整行,不會出現連續兩個重疊的c的。如下:

[root@xiaojin oldboy]# who|cut -b -3,3-
root pts/1 2019-01-08 20:27 (10.0.0.1)

2、以字符爲定位

提取第3,第4,第5和第8個字符:

[rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt




[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt




看到了吧,用-c則會以字符爲單位,輸出正常;而-b只會傻傻的以字節(8位二進制位)來計算,輸出就是亂碼。
當遇到多字節字符時,可以使用-n選項,-n用於告訴cut不要將多字節字符拆開。如下:

[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2




[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2

[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3




3、以字段爲定位

測試文件
cat >>test01.txt<<EOF
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98
EOF
-f 選項提取指定字段,一半配合-d使用

[root@xiaojin oldboy]# cut -d " " -f 2 test01.txt
Name
tom
jack
alex
[root@xiaojin oldboy]# cut -d " " -f 2,3 test01.txt
Name Mark
tom 69
jack 71
alex 68

與-b,-c的區別

[root@xiaojin oldboy]# cut -c 1 test01.txt
N
0
0
0

[root@xiaojin oldboy]# cut -b 2 test01.txt
o
1
2
3

--complement 選項提取指定字段之外的列(打印除了第二列之外的列):

[root@xiaojin oldboy]# cut -d " " -f 2 --complement test01.txt
No Mark Percent
01 69 91
02 71 87
03 68 98
[root@xiaojin oldboy]# cut -d " " -f 2 test01.txt
Name
tom
jack
alex
[root@xiaojin oldboy]# cat test01.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98

4、-d 指定分隔符

[root@xiaojin oldboy]# cut -d " " -f 2 test01.txt
Name
tom
jack
alex
[root@xiaojin oldboy]# cat test01.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章