Linux的文本處理命令,包含sort,、uniq,、join、cut,、paste,、split、tr,、tar,,這些命令能實(shí)現(xiàn)對(duì)文件記錄排序、統(tǒng)計(jì),、合并,、提取、粘貼,、分割,、過(guò)濾、壓縮和解壓縮等,,它們與sed和awk一起構(gòu)成了Linux文本處理的所有命令和工具,。
5.1 sort命令 # sort [選項(xiàng)] [輸入文件]
先建立一個(gè)CARGO.db的示例文件:
Txt代碼
# sort -t: CARGO.db #以默認(rèn)方式對(duì)CARGO.db進(jìn)行排序,,注意-t跟:之間沒(méi)有空格,,也可以加空格
# sort -t : -k3 CARGO.db 注:-k3雖然是以第三個(gè)域來(lái)排序,,但還是以默認(rèn)的字符排序方法,不是數(shù)字,,如果第三個(gè)域相同,,那么再依次以第4個(gè)域、第5個(gè)域排序,。 # sort -t : -k3n CARGO.db #以第3個(gè)域并且以數(shù)字順序排序 # sort -t : -k 3nr,3 -k 2,2 CARGO.db #以第3個(gè)域數(shù)字逆排序,,如果第3個(gè)域相同,以第2個(gè)域再排序 # sort -t : -k3nr CARGO.db #以第3個(gè)域并且以數(shù)字順序排序,,逆向排序 # sort -t : -k3nr -o out CARGO.db #不輸出到標(biāo)準(zhǔn)輸出中,,而是重定向到out文件中去 # sort -t : -k3n -c CARGO.db #測(cè)試一下第3個(gè)域是否已經(jīng)安裝數(shù)字排好了序 # sort -t: -k3n -m CARGO.db CARGO.db2 #將兩個(gè)已經(jīng)按照第3域數(shù)字排好序的文件合并
5.1.2 sort和awk的聯(lián)合使用 文本塊的排序,一個(gè)文件中有很多相似的段落,,每個(gè)段落記錄一個(gè)人的姓名地址等,,如果段落排序: # cat PROFESSOR.db | awk -v RS="" '{gsub("\n","@");print}' | sort | awk -v ORS="\n\n" '{gsub("@","\n");print}' 注:awk -v 用于定義一個(gè)變量供后面使用,可以覆蓋系統(tǒng)變量 可以看出當(dāng)RS為空時(shí),,awk會(huì)自動(dòng)以多行來(lái)做為分割符,。 上面的RS也可以為RS="\n\n"
5.2 uniq命令
注意uniq跟sort -u的區(qū)別,,uniq的重復(fù)行必須是連在一起才會(huì)去算的,,分開(kāi)了就另外算一條記錄了,。 Bash代碼
5.4 cut命令 cut命令用于從標(biāo)準(zhǔn)輸入或文本文件中按域或字符提取文本 cut -c/-f/-d input -c:指定提取的第幾個(gè)字符或字符范圍 -f:指定其他的第幾個(gè)于或域范圍 -d:改變域分隔符 # cut -c3 input.txt -> 提取每行第三個(gè)字符 # cut -c1-5 input.txt -> 提取每行第1至第5個(gè)字符 # cut -c1,5 input.txt -> 提取每行第1和第5個(gè)字符 # cut -d: -f1,4 input.txt -> 以:作為分隔符提取第1和第4個(gè)域 # cut -d: -f1-3 input.txt -> 以:作為分隔符提取第1至第3域
5.5 paste命令 paste用于將文本文件或標(biāo)準(zhǔn)輸出中的內(nèi)容粘貼到新的文件中去,它可以將來(lái)自不同文件的數(shù)據(jù)粘貼在一起,,輸出到標(biāo)準(zhǔn)輸出中去,,或重定向到一個(gè)新的文件。 # paste [option] file1 file2 -d:默認(rèn)域分隔符是空格或Tab鍵,,設(shè)置新的域分隔符 -s:將每個(gè)文件粘貼成一行 -:從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù) # paste -d@ FILE1 FILE2 -> 每一行FILE1輸入在前,,F(xiàn)ILE2數(shù)據(jù)在后,然后用@分割 注:paste的-d跟其他sort,、join,、cut命令是不一樣的,僅僅是為了設(shè)置輸出文件的格式而已,。
5.6 split命令 split命令用于將大文件切割成小文件,,split命令可以按照文件的行數(shù),、字節(jié)數(shù)切割文件,并能在輸出的多個(gè)小文件中自動(dòng)加上編號(hào),。 # split [option] bigfile smallfile - 或 -l:用于指定切割成的小文件的行數(shù) -b:指定切割成的小文件的字節(jié)數(shù) -C:與-b類(lèi)似,,也是指定字節(jié)數(shù),但是切割時(shí)盡量維持每行的完整性 # split -2 big.txt small.txt split命令切割成的小文件最多只能有1000行 # split -b100 big.txt small.txt # split -C100 big.txt small.txt
--------------------------常見(jiàn)命令------------------------------ # 文件夾下面查找最大的文件: # find -type f ! -path '*/.svn/*' -exec stat -c "%s %n" {} \;|sort -nr|head -10 |
|
來(lái)自: 看風(fēng)景D人 > 《shell腳本編程》