日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell脚本--cut命令

發(fā)布時間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell脚本--cut命令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html


1.1 選項說明

cut命令將行按指定的分隔符分割成多列,它的弱點在于不好處理多個分隔符重復(fù)的情況,因此經(jīng)常結(jié)合tr的壓縮功能。

-b:按字節(jié)篩選;
-n:與"-b"選項連用,表示禁止將字節(jié)分割開來操作;
-c:按字符篩選;
-f:按字段篩選;
-d:指定字段分隔符,不寫-d時的默認字段分隔符為"TAB";因此只能和"-f"選項一起使用。
-s:避免打印不包含分隔符的行;
--complement:補足被選擇的字節(jié)、字符或字段(反向選擇的意思或者說是補集);
--output-delimiter:指定輸出分割符;默認為輸入分隔符。

假設(shè)/tmp/abc.sh中下面所示的內(nèi)容。注意:第2行到第5行每列不是都以單個空格分隔的,有的地方重復(fù)了幾個空格,有的地方只有一個空格,也就是說,文本內(nèi)容不是很規(guī)則。并且最后一行完全沒有空格。

[root@xuexi tmp]# cat abc.sh NO Name SubjectID Mark 備注 1 longshuai 001 56 不及格 2 gaoxiaofang 001 60 及格 3 zhangsan 001 50 不及格 4 lisi 001 80 及格 5 wangwu 001 90 及格 djakldj;lajd;sla

下面是cut的示例。

1.2 按字段篩選

在abc.sh中有5個字段。篩選出第二字段name列和第4字段mark列。使用空格作為分隔符。

[root@xuexi tmp]# cut -d" " -f2,4 abc.sh Name00150djakldj;lajd;sla

可以看到,輸出的是亂七八糟的非預(yù)期結(jié)果。原因就是分隔符空格在分隔的地方重復(fù)了多次。所以想要正確顯示結(jié)果,需要把重復(fù)空格處理掉。

可以使用tr工具來壓縮連續(xù)字符。

[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d " " -f2,4 Name Mark longshuai 56 gaoxiaofang 60 zhangsan 50 lisi 80 wangwu 90 djakldj;lajd;sla

但是輸出中的最后一行中完全沒有定界符的行也輸出了,這需要使用-s來取消這樣的輸出。

[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d" " -f2,4 -s Name Mark longshuai 56 gaoxiaofang 60 zhangsan 50 lisi 80 wangwu 90

1.3 使用--complement

輸出除了第2字段和第4字段其余的所有字段。

[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d" " -f2,4 -s --complement NO SubjectID 備注 1 001 不及格 2 001 及格 3 001 不及格 4 001 及格 5 001 及格

1.4 按字節(jié)或字符分割

英文和阿拉伯數(shù)字是單字節(jié)字符,中文是雙字節(jié)字符,甚至是3字節(jié)字符。

使用-b來按字節(jié)篩選,使用-c按字符分割。

注意,按字節(jié)或字符分割時將不能指定-d,因為-d是劃分字段的。

[root@xuexi tmp]# cut -b1-3 abc.sh # 篩選第1-3個字節(jié)的內(nèi)容 NO 1 l 2 g 3 z 4 l 5 w dja

由于篩選中文,結(jié)果中出現(xiàn)亂碼。

[root@xuexi tmp]# cut -b20 abc.sh

所以"-b"選項需要結(jié)合"-n"選項,以禁止"-b"選項將多字節(jié)的字符強行分割導(dǎo)致亂碼。

[root@xuexi tmp]# cut -n -b20 abc.sh a 不 0

也可以按字符分隔。

[root@xuexi tmp]# cut -c20 abc.sh a 不 0

1.5 使用--output-delimiter

使用"--output-delimiter"指定輸出分隔符。

使用-b或者-c分隔了多段字符時,可以使用--output-delimiter,否則這些多段將拼接在一起。

[root@xuexi tmp]# cut -b3-5,6-8 abc.sh # 拼接在一起Name longsh gaoxia zhangs lisi 0 wangwu akldj;[root@xuexi tmp]# cut -b3-5,6-8 abc.sh --output-delimiter "," # 逗號分隔多段Na,me lon,gsh gao,xia zha,ngs lis,i 0 wan,gwu akl,dj;

1.6 cut中的范圍指定

可以使用"N-"、"N-M"和"-M"分別表示每行N字符(或字節(jié)或字段)后的所有內(nèi)容、N-M段內(nèi)容和M段之前的內(nèi)容。注意包括N和M的邊界。

[root@xuexi tmp]# cut -d" " -f3- abc.sh -s # 輸出第三字段和后面所有的內(nèi)容 SubjectID Mark 備注 001 56 不及格 001 60 及格 001 50 不及格 001 80 及格 001 90 及格

范圍交叉時,不會重復(fù)輸出。比如-f3-5,4-6,則輸出-f3-6。

[root@xuexi tmp]# cut -d" " -f3-5,4-6 abc.sh -s # 范圍交叉 SubjectID Mark 備注 001 56 不及格 001 60 及格 001 50 不及格 001 80 及格 001 90 及格

如果范圍順序無序,則Linux會先對范圍排序(升序)再輸出。例如-f4-6,2等價于-f2,4-6。

[root@xuexi tmp]# cut -d" " -f4-6,2 abc.sh -s Name Mark 備注 longshuai 56 不及格 gaoxiaofang 60 及格 zhangsan 50 不及格 lisi 80 及格 wangwu 90 及格

轉(zhuǎn)載于:https://www.cnblogs.com/f-ck-need-u/p/7521357.html

總結(jié)

以上是生活随笔為你收集整理的shell脚本--cut命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。