shell腳本--cut命令

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


1.1 選項說明

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

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

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

[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

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

可以使用tr工具來壓縮連續字符。

[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 按字節或字符分割

英文和阿拉伯數字是單字節字符,中文是雙字節字符,甚至是3字節字符。

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

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

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

由于篩選中文,結果中出現亂碼。

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

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

[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字符(或字節或字段)后的所有內容、N-M段內容和M段之前的內容。注意包括N和M的邊界。

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

范圍交叉時,不會重復輸出。比如-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 及格

轉載于:https://www.cnblogs.com/f-ck-need-u/p/7521357.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282401.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12C RAC for ASM添加磁盤步驟

RHEL 7.2使用EMC Powerpath擴容2T磁盤空間,需要添加至以用12C RAC for ASM系統中。下面是具體步驟,主機人員告知擴容別名為data_center_16、data_center_17 1:linux 7 系統下添加映射存儲LUN(無需重啟)1>查看機器HBA卡信息--兩個節點機器都…

Windows 下 Redis 的下載和安裝

一 安裝redis 1. 下載redis https://github.com/MicrosoftArchive/redis/releases 注: 如果上面網址下載不了, 就到這里下載 https://download.csdn.net/download/m_nanle_xiaobudiu/104370342. 解壓壓縮文件夾3. 運行redis服務端到此 , redis已經可以正常使用了,但是為了方便…

什么是行內塊元素?

2019獨角獸企業重金招聘Python工程師標準>>> 我們都知道行內元素和塊級元素,在實際開發中,經常會聽到行內塊元素,那么什么是行內塊元素呢? 行內塊元素實際就是把塊元素以行的形式展現,保留了塊元素可以設置的對應CSS屬…

WPF-08 控件模板

模板是描述控件外觀,WPF中每個控件都有一個默認的模板,你可以通過定義模板來重寫控件可視化外觀和行為,WPF中有兩種常用的模板Control Template和Data TemplateControl Template控件模板定義了控件的可視化外觀,所有的UI控件都有自…

玄學搜索\隨稽化

正解又不會寫,又懶得去想 只好每次考試大大暴力,維持一下生活了 ----------------------- P1337 [JSOI2004]平衡點 / 吊打XXX 題目描述 有n個重物,每個重物系在一條足夠長的繩子上。每條繩子自上而下穿過桌面上的洞,然后系在一起。…

第0次作業

問題1:你為什么選擇計算機專業?你認為你的條件如何? 答:我平時比較喜歡研究一些自己認為神秘的東西,我認為計算機就是這樣的神秘東西!所以我選擇這個專業!我認為我自己可以學會計算機這個專業!我對自己有信…

Nginx +Tomcat 實現動靜態分離(轉)

Nginx Tomcat 實現動靜態分離 動靜態分離就是Nginx處理客戶端的請求的靜態頁面(html頁面)或者圖片,Tomcat處理客戶端請求的動態頁面(jsp頁面),因為Nginx處理的靜態頁面的效率高于Tomcat。 一.Nginx簡介: Ng…

Beanstalked的初步了解和使用(包括利用beanstalkd 秒殺消息隊列的實現)

一 Beanstalkd 是什么 Beanstalkd,一個高性能、輕量級的分布式內存隊列系統二 Beanstalkd 特性 1. 優先級(priority) 注:優先級就意味 支持任務插隊(數字越小,優先級越高,0的優先級最高&#…

WPF效果第二百篇之再玩Gamma曲線

前面效果中使用比較low的方式實現了2.4的Gamma曲線;雖說后面加了點動畫呈現效果,但也就是個過渡版;今天才基本符合需求的效果:1、還是基于WPF效果第一百七十八篇之貝塞爾曲線他來實現的:3個ListBox 3個LandmarkControl2、在LandmarkControl增加插點位事件View:LandmarkControl …

2018企業面試總匯(答案請自行搜羅) 新增19年阿里面題(反向拓展技術棧)

Java 1.多個線程同時讀寫,讀線程的數量遠遠大于寫線程,你認為應該如何解決并發的問題?你會選擇加什么樣的鎖? 2.JAVA的AQS是否了了解,它是干嘛的? 3.除了synchronized關鍵字之外,你是怎么來保障…

skynet源碼閱讀5--協程調度模型

注:為方便理解,本文貼出的代碼部分經過了縮減或展開,與實際skynet代碼可能會有所出入。 作為一個skynet actor,在啟動腳本被加載的過程中,總是要調用skynet.start和skynet.dispatch的,前者在skynet-os中…

ASP.NET Core GRPC 和 Dubbo 互通

一.前言Dubbo 是比較流行的服務治理框架,國內不少大廠都在使用。以前的 Dubbo 使用的是私有協議,采集用的 hessian 序列化,對于多語言生態來說是極度的不友好。現在 Dubbo 發布了新版本 v3,推出了基于 gRPC 的新協議 Triple&#…

詳解C# 迭代器

[引用:https://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html] 迭代器模式是設計模式中行為模式(behavioral pattern)的一個例子,他是一種簡化對象間通訊的模式,也是一種非常容易理解和使用的模式。簡單來說,迭代器模…

利用redis List隊列簡單實現秒殺 PHP代碼實現

一 生產者producer部分 --------------------------------producer 部分注釋------------------------------------------------------------ 用戶在頁面請求之后, 獲取到用戶uid , 跳轉到這個加入隊列的方法 (這里直接在producer中模擬了多個uid) 在方法內部判斷redis隊列長…

使用Filezilla 與 linux遠程服務器傳輸文件時,設置默認打開編輯器

1. 點擊編輯 2. 選擇設置,點擊文本編輯 3. 設置編輯器目錄 4. 確定作用: 這樣設置之后,可以實現在遠程站點欄直接下載并使用phpstorm編輯的作用 正常需要下載之后,再去本地相應下載目錄打開,然后再進行上傳文件&#x…

SDOI2017 新生舞會

01規劃 a1a2a3...ai/b1b2b2..bi最大 設一個k 使得 a1a2a3...ai/b1b2b3...bi>k 變換式子得到 a1a2a3...ai>(b1b2b3..bi)*k a1-b1*ka2-b2*ka3-b3*k...ai-bi*k>0 ai-bi*k即流量 最大費用流二分答案 來&#xff0c;上代碼&#xff1a; #include <cmath> #include &l…

在 .NET 中使用 FluentValidation 進行參數驗證

不用說&#xff0c;參數驗證很重要&#xff0c;無效的參數&#xff0c;可能會導致程序的異常。如果使用Web API或MVC頁面&#xff0c;那么可能習慣了自帶的規則驗證&#xff0c;我們的控制器很干凈&#xff1a;public class User {[Required]public string FirstName { get; se…

在win10系統下怎樣快速切換任務視圖

2019獨角獸企業重金招聘Python工程師標準>>> 切換窗口&#xff1a;Alt Tab 任務視圖&#xff1a;Win Tab (松開鍵盤界面不會消失) 切換任務視圖&#xff1a;Win Ctrl 左/右 創建新的虛擬桌面&#xff1a;Win Ctrl D 關閉當前虛擬桌面&#xff1a;Win Ctrl F4…

uwp應用在debug模式下運行正常,編譯為release版本的時候拋出異常

原因是在代碼中使用了dynamic關鍵字&#xff0c;導致release時.net native優化了代碼造成元數據丟失 所以在代碼中要盡量不用dynamic。轉載于:https://www.cnblogs.com/poison/p/7532142.html

Linux上搭建Samba,實現windows與Linux文件數據同步

一 環境介紹 1. 本地win10 2. Linux (centos7.4) 注&#xff1a;因為運營商方面禁止smb協議&#xff0c;導致無法在云服務器上使用smb&#xff0c;如果不是在虛擬機上操作&#xff0c;而是在云服務器上操作&#xff0c;建議還是使用 filezillaxshell組合 或者 使用finalshell等…