久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

《Linux Shell》之四:文件的排序,、合并和分割

 看風(fēng)景D人 2015-01-16

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)] [輸入文件]

選項(xiàng) 意義
-c 測(cè)試文件是否已經(jīng)排序
-k 指定排序的域
-m 合并兩個(gè)已排序的文件
-n 根據(jù)數(shù)字大小進(jìn)行排序
-o [輸出文件] 將輸出寫(xiě)到指定的文件,相當(dāng)于將輸出重定向到文件
-r

將排序結(jié)果逆向顯示

-t 改變域分隔符(默認(rèn)是空格)
-u 去除結(jié)果中的重復(fù)行

 

先建立一個(gè)CARGO.db的示例文件:

 

Txt代碼  收藏代碼
  1. Thindpad:USA:14000:2009:X301  
  2. Thinkpad:HongKong:10000:2008:T400  
  3. Thinkpad:USA:8000:2007:X60  
  4. HP:China:5600:2010:DM3  
  5. HP:China:12000:2010:NE808  
  6. SumSung:Korea:5400:2009:Q308  
  7. IdeaPad:China:8000:2007:U450  

# 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命令

選項(xiàng) 意義
-c 打印每行在文本中重復(fù)的次數(shù)
-d 只顯示有重復(fù)的記錄,每個(gè)重復(fù)記錄只出現(xiàn)一次
-u 只顯示沒(méi)有重復(fù)的記錄

注意uniq跟sort -u的區(qū)別,,uniq的重復(fù)行必須是連在一起才會(huì)去算的,,分開(kāi)了就另外算一條記錄了,。

Bash代碼  收藏代碼
  1. #!/bin/bash  
  2. # 統(tǒng)計(jì)一個(gè)文件中每個(gè)單詞出現(xiàn)的次數(shù)  
  3.   
  4. ARGS=1        #輸入?yún)?shù)個(gè)數(shù)為1,就是一個(gè)文件名  
  5. E_BADARGS=55  #輸入?yún)?shù)錯(cuò)誤碼  
  6. E_NOFILE=56   #輸入文件不存在  
  7.   
  8. # 參數(shù)個(gè)數(shù)不為1,,返回錯(cuò)誤碼E_BADARGS  
  9. if [ $# -ne "$ARGS" ];then  
  10.         echo "Usage: 'basename $0' filename"  
  11.         exit $E_BADARGS  
  12. fi  
  13.   
  14. # 輸入的文件名不存在,返回錯(cuò)誤碼E_NOFILE  
  15. if [ ! -f "$1" ];then  
  16.         echo "File \"$1\" does not exists."  
  17.         exit $E_NOFILE  
  18. fi  
  19.   
  20. # 以下是核心算法  
  21. # sed命令用于過(guò)濾句號(hào),、逗號(hào),、分號(hào),當(dāng)然可以繼續(xù)加上需要過(guò)濾的符號(hào)  
  22. # sed命令第4個(gè)-e選項(xiàng)將單詞間的空格轉(zhuǎn)化為換行符  
  23. # sort對(duì)sed過(guò)濾結(jié)果排序,,每行一個(gè)單詞  
  24. # uniq -c輸出重復(fù)行的次數(shù),,sort -nr 按照出現(xiàn)頻率從大到小排序  
  25. sed -e 's/[\.\,\:\;\!]/ /g' -e 's/\s\+/ /g' -e 's/\s\+$//g' -e 's/ /\n/g' "$1" | sort | uniq -c | sort -nr  
  26.   
  27. exit 0  

 

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多