shell腳本(三)



shell腳本(三)

2、文件排序、合併和分割

(1)sort命令

#-c:測試文件是否已經排序;-k:指定排序域;-m:合併兩個已經排序的文件;

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

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

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

sort -u -r a.txt

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

sort -t: -k3n /etc/passwd

#合併已經排序的兩個文件,需要合併的兩個文件一定是已經排序了的

sort -u -m a.txt b.txt

#根據第2域來排序

sort -k2 a.txt


(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

#再如

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

sort 10.txt | uniq -c 10.txt

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

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

uniq -d 10.txt

sort 10.txt | uniq -d 10.txt

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

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


(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

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

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

#顯示文件1第1域、文件2第3域和文件1第2域

#-v1:不顯示文件1以共同域進行連接的結果

#-v2:不顯示文件2以共同域進行連接的結果

#-1:文件1需要連接的域;-2:文件2需要連接的域。指定域必需要先進行排序

#默認比較文件1和文件2的第1域。

#以文件1的第1域和文件2的第3域連接

join -t: -1 1 -2 3 name.txt num.txt

(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

#提取第4到第6個字符

cut -c4-6 name.txt

#提取第2到最後字符

cut -c2- name.txt

#提取第2和第6個字符

cut -c2,6 name.txt

#以":"爲分隔符,提取第1域

cut -d: -f1 num.txt

#以":"爲分隔符,提取第1域到第3域

cut -d: -f1-3 num.txt

#以":"爲分隔符,提取第2域到最後1域

cut -d: -f2- num.txt

#以":"爲分隔符,提取第1域和第4域

cut -d: -f1,4 num.txt

#提取第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

#以"-"爲分隔符,一個文件1行來將name.txt和num.txt合併

#即每一個文件行與行之間以"-"作爲連接,將所有行連接成1行

#後面的文件以同樣方式連接,然後追加到上一個文件最後面,最終一個文件1行

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

#合併name.txt和num.txt,並以默認分隔符作爲分隔符

paste -s name.txt num.txt

(6)split命令

#split 選項 file star_name,切割的文件名以start_name開頭,默認以x開頭

#將大文件切割成小文件,可以按照文件的行數、字節數切割文件,並能在輸出的小

#小文件中自動加上編號

#-數字n或-l數字n:以n行作爲一個文件;-b:指定多少個字節作爲一個文件;

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


#以2行作爲1個文件,切割文件名以startname開頭

split -2 name.txt startname

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