shell指令碼(三)

來源:互聯網
上載者:User

標籤:shell指令碼(三)



shell指令碼(三)2、檔案排序、合并和分割(1)sort命令

#-c:測試檔案是否已經排序;-k:指定排序域;-m:合并兩個已經排序的檔案;

#-n:根據數字大小進行排序;-o:將輸出寫到檔案;-r:將排序結果逆向顯示

#-t:改變域分隔字元;-u:去除結果中的重複行

#將a.txt逆向排序,並去除重複的行

sort -u -r a.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/10/wKioL1VyvlHgv2Q5AACL5nWYlss092.jpg" />

#以":"為分隔字元,根據第3域數字大小來對/etc/passwd排序

sort -t: -k3n /etc/passwd

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/14/wKiom1VyvLKSkVryAAMRrUH0Wns003.jpg" />

#合并已經排序的兩個檔案,需要合并的兩個檔案一定是已經排序了的

sort -u -m a.txt b.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/10/wKioL1VyvlKyjEBrAACcA49_NiI117.jpg" />

#根據第2域來排序

sort -k2 a.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/10/wKioL1VyvlLjXpP6AABr_8PtRws334.jpg" />


(2)uniq命令


#去除文本中重複的行,-c:列印第行在文本中重複出現次數;-d:只顯示有重複的記錄,

#每個重複記錄只出現一次;-u:只顯示沒有重複的記錄

#需要特別注意的是所說的"重複"是指連續出現的重複!如檔案test.txt內容:

1

1

2

1

uniq -c test.txt

#結果為,第1行數字1出現次數為2,第2行數字2出現次數為1,第4第數字1出現次數為1

2 1

1 2

1 1

#再如

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/14/wKiom1VyvLLiqO81AACsq75LAwI222.jpg" />

#如果需要統計檔案中所有重複的行,則需要先對它進行排序

sort 10.txt | uniq -c 10.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/14/wKiom1VyvLOwv-gSAABiNgzk164835.jpg" />

#注意與uniq -c 10.txt的區別

#只顯示重複的行,注意兩者區別

uniq -d 10.txt

sort 10.txt | uniq -d 10.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/10/wKioL1VyvlKj3r_lAACES8IjnVA766.jpg" />

#只顯示沒有重複的行,注意檔案排序前後去除重複行結果對比

#因為第1行開始數字1連續出現3次,所以uniq -u 10.txt 不會在第1行顯示1

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/14/wKiom1VyvLOSoWM1AAC3DWT4wbA100.jpg" />


(3)join命令

#實現兩個檔案記錄的串連,需要注意的是串連的檔案要先進行排序,否則報錯!

#必需對串連域進行排序再串連,否則報錯!

#-i:比較域內容時,忽略大小寫差異;-o:設定結果顯示的格式;-t:改變域分隔字元;

#-1和-2:-1設定檔案1用於串連的域,-2設定檔案2用於串連的域

#-a1或-a2:除了顯示共同域進行串連的結果外,-a1表示還顯示檔案1中沒有共同

#域的記錄;-a2表示顯示檔案2中沒有共同域的記錄

#串連兩個檔案相同的域,域以":"為分隔字元,注意"B lily"和"B Lily"是不同的!

join -t: a.txt b.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/10/wKioL1VyvlOhKhw9AADVYZuaKw0771.jpg" />

#添加-i忽略大小寫串連效果

join -t: -i a.txt b.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/10/wKioL1VyvlThBfqnAABgRZWFRkc282.jpg" />

#顯示檔案1第1域、檔案2第3域和檔案1第2域

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/14/wKiom1VyvLWipdJ5AAElYDEQgyI701.jpg" />

#-v1:不顯示檔案1以共同域進行串連的結果

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/14/wKiom1VyvLXAs_y5AADG_qO4TtU253.jpg" />

#-v2:不顯示檔案2以共同域進行串連的結果650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/10/wKioL1VyvlXTm_GbAADopjQQlak249.jpg" />

#-1:檔案1需要串連的域;-2:檔案2需要串連的域。指定域必需要先進行排序

#預設比較檔案1和檔案2的第1域。

#以檔案1的第1域和檔案2的第3域串連

join -t: -1 1 -2 3 name.txt num.txt650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/10/wKioL1VyvlXS02HvAAEklmrL75Q410.jpg" />

(4)cut命令

#cut從標準輸入或文字檔中按域或行提取文本

#-c:指定提取的字元數或字元範圍;-f:指定提取的域數或域範圍;-d:指定域分隔字元

#cut從標準輸入或文字檔中按域或行提取文本

#-c:指定提取的字元數或字元範圍;-f:指定提取的域數或域範圍;-d:指定域分隔字元

#-cm-n:表示第m到第n個字元;-cm,n:表示第m和第n個字元;

#-cn:表示n個字元;-cn-:表示從第n個字元到最後一個字元。

#-fm-n:表示第m到第n個域;-fm,n:表示第m域和第n域;-fn:表示第n域;

#-fn-:表示從第n域到最後一個域。與-c類似。

#提取第5個字元

cut -c5 name.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/14/wKiom1VyvLagKnvbAAB55UMAhu0887.jpg" />

#提取第4到第6個字元

cut -c4-6 name.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/10/wKioL1VyvlXAl3BZAAB8qXLhDdk753.jpg" />

#提取第2到最後字元

cut -c2- name.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/14/wKiom1VyvLaTkYgGAACKJNwNhJc875.jpg" />

#提取第2和第6個字元

cut -c2,6 name.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/14/wKiom1VyvLaALsO0AACi09VUUsw723.jpg" />

#以":"為分隔字元,提取第1域

cut -d: -f1 num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/10/wKioL1VyvlbzbYGsAACYBEHxdl8652.jpg" />

#以":"為分隔字元,提取第1域到第3域

cut -d: -f1-3 num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/10/wKioL1VyvlaAJe7PAAC4IlN42hs117.jpg" />

#以":"為分隔字元,提取第2域到最後1域

cut -d: -f2- num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/14/wKiom1VyvLfA1HJ9AADGTheIalo160.jpg" />

#以":"為分隔字元,提取第1域和第4域

cut -d: -f1,4 num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/14/wKiom1VyvLfR9-L8AAC7ZTwDD28561.jpg" />

#提取第3域的第5個字元

cut -d: -f3 num.txt | cut -c5

(5)paste命令

#將文本或標準輸出中的內容粘貼到新的檔案,可將來自不同檔案的資料粘貼到一起

#-d:指定分隔字元,預設為空白格或tab;-s:將每個檔案粘貼成1行;-:從標準輸出讀取資料

#合并name.txt和num.txt,並以"-"作為分隔字元

paste -d- name.txt num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/10/wKioL1VyvlihbCFNAADuw4e36Gk284.jpg" />

#以"-"為分隔字元,一個檔案1行來將name.txt和num.txt合并

#即每一個檔案行與行之間以"-"作為串連,將所有行串連成1行

#後面的檔案以同樣方式串連,然後追加到上一個檔案最後面,最終一個檔案1行

paste -d- -s name.txt num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/10/wKioL1VyvliTVhTHAADiHO8RT1E833.jpg" />

#合并name.txt和num.txt,並以預設分隔符號作為分隔字元

paste -s name.txt num.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/14/wKiom1VyvLmzat-UAAB-vVCZvt8424.jpg" />

(6)split命令

#split 選項 file star_name,切割的檔案名稱以start_name開頭,預設以x開頭

#將大檔案切割成小檔案,可以按照檔案的行數、位元組數切割檔案,並能在輸出的小

#小檔案中自動加上編號

#-數字n或-l數字n:以n行作為一個檔案;-b:指定多少個位元組作為一個檔案;

#-C:與-b類似,但是是切割時盡量維護每行的完整性


#以2行作為1個檔案,切割檔案名稱以startname開頭

split -2 name.txt startname

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/14/wKiom1VyvLqgF0hZAAEIB2avtBA411.jpg" />

本文出自 “愛就行動” 部落格,請務必保留此出處http://1055745601.blog.51cto.com/5003160/1659235

shell指令碼(三)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.