Linux基礎篇,文本數據的比較與排序:sort、uniq、comm、diff


一、sort

sort命令用於將文本文件內容以行排序

sort   [選項參數]   [-o<輸出文件>]   [-t<分隔字符>]   [+<起始欄位>   -<結束欄位>]   [文件]

-c ===> 檢查文件是否已經按照順序排序 

-b ===> 忽略每行前面開始處的空格字符
-i ===> 排序時,除了040至176之間的ASCII字符外,忽略其他的字符
-d ===> 排序時,處理英文字母、數字及空格字符外,忽略其他的字符
-f ===> 排序時,將小寫字母視為大寫字母
-M ===> 將前面3個字母依照月份的縮寫進行排序
-n ===> 依照數值的大小排序
-g ===> 按通用數值排序,支持科學計數法
-r ===> 以相反的順序來排序

-u ===> 對排序后的數據去重
-m ===> 將幾個排序好的文件進行合並

-t ===> <分隔字符> 指定排序時所用的欄位分隔字符
-k ===> POS1[,POS2] (配合-t)排序從POS1開始,若指定POS2,則POS2結束,否則以pos1排序
 + ===> <起始欄位> -<結束欄位> 以指定的欄位來排序,范圍由起始欄位到結束欄位的前一欄位(從0開始)
-o ===> <輸出文件> 將排序后的結果存入指定的文件

1.sort   [file]

后面直接跟文件名時,會以每一行的第一個字符進行排序,如果第一個字符相同則比第二個,以此類推

2.sort   -n/g

根據數值進行排位

3.sort   -n   -t   [分隔符]   -k  [排序參考欄目標號]

4.

du   -h   [目錄]   |   sort   -h

du   -h   /root/   |   grep -v   '^0'  |   sort   -h

將某目錄下的文件按文件大小排序

二、uniq

uniq用於重復數據處理,使用前數據必須完成排序(一般指sort排序)

uniq   [選項參數]    [輸入文件]   [輸出文件]

-c ===> 在每列旁邊顯示該行重復出現的次數
-d ===> 只打印重復的行,重復的行只顯示一次
-D ===> 只打印重復的行,重復的行出現多少次就顯示多少次
-f ===> 忽略行首的幾個字段
-i ===> 忽略大小寫
-s ===> 忽略行首的幾個字母
-u ===> 只打印唯一的行
-w ===> 比較不超過n個字母
-z ===> 使用'\0'作為行結束符,而不是新換行

1.uniq   -c

統計某文本每行數據出現的次數

2.uniq   -D

統計某文件重復行,並把重復行都顯示出來

三、comm

對已存在有序文件進行比較:第一列只在文件1中出現的文件,第二列只在文件2中出現的文件,第三列在文件1和文件2中同事出現的文件

comm   [-123]   [第一個文件]   [第二個文件]

-1 ===> 不顯示在第1個文件中出現的列
-2 ===> 不顯示在第2個文件中出現的列
-3 ===> 不顯示只在第1或第2個文件中出現的列

兩個文件中重復出現的行

四、diff

1.參數說明

diff   [選項]   [文件1或目錄1]   [文件2或目錄2]  (四種組合方式)

diff   [-abBcdefHilnNpPqrstTuvwy]   [-<行數>]   [-C <行數>]   [-D <巨集名稱>]   [-I <字符或字符串>]   [-S <文件>]   [-W <寬度>]   [-x <文件或目錄>]   [-X <文件>]   [--left-column]   [--suppress-common-line]   [文件或目錄1]   [文件或目錄2]

注意:
=====================================================================================
1.diff命令一般比較兩個文件的不同,如果使用”-”代替文件參數,則要比較的內容將來自標准輸入
2.diff命令是以逐行的方式比較文本文件的異同
3.如果指定比較的是目錄的時候,diff命令會比較兩個目錄下名字相同的文本文件,但不會比較其中子目錄
=====================================================================================



-a ===> diff預設只會逐行比較文本文件。
-b ===> 不檢查空格字符的不同。
-B ===> 不檢查空白行
-c ===> 顯示全部內文,並標出不同之處
-d ===> 使用不同的演算法,以較小的單位來做比較
-e ===> 此參數的輸出格式可用於ed的script文件
-f ===> 輸出的格式類似ed的script文件,但按照原來文件的順序來顯示不同處
-H ===> 比較大文件時,可加快速度
-i ===> 不檢查大小寫的不同。
-l ===> 將結果交由pr程序來分頁
-n ===> 將比較結果以RCS的格式來顯示
-p ===> 若比較的文件為C語言的程序碼文件時,顯示差異所在的函數名稱
-N ===> 在比較目錄時,若文件A僅出現在某個目錄中,預設會顯示
-P ===> 與-N類似,但只有當第二個目錄包含了一個第一個目錄所沒有的文件時,才會將這個文件與空白的文件做比較
-q ===> 僅顯示有無差異,不顯示詳細的信息
-r ===> 比較子目錄中的文件
-s ===> 若沒有發現任何差異,仍然顯示信息
-t ===> 在輸出時,將tab字符展開
-T ===> 在每行前面加上tab字符以便對齊
-w ===> 忽略全部的空格字符。
-y ===> 以並列的方式顯示文件的異同之處。

–left-column ===> 在使用-y參數時,若兩個文件某一行內容相同,則僅在左側的欄位顯示該行內容
–suppress-common-lines ===> 在使用-y參數時,僅顯示不同之處

-<行數> ===> 指定要顯示多少行的文本(此參數必須與-c或-u參數一並使用)
-C<行數> ===> 與執行”-c-<行數>”指令相同
-W<寬度> ===> 在使用-y參數時,指定欄寬
-u(U)<列數> ===> 以合並的方式來顯示文件內容的不同
-D<巨集名稱> ===> 此參數的輸出格式可用於前置處理器巨集
-S<文件> ===> 在比較目錄時,從指定的文件開始比較
-X<文件> ===> 您可以將文件或目錄類型存成文本文件,然后在=<文件>中指定此文本文件
-X<文件> ===> 您可以將文件或目錄類型存成文本文件,然后在=<文件>中指定此文本文件
-x<文件名或目錄> ===> 不比較選項中所指定的文件或目錄
-x<文件名或目錄> ===> 不比較選項中所指定的文件或目錄
-l<字符或字符串> ===> 若兩個文件在某幾行有所不同,而這幾行同時都包含了選項中指定的字符或字符串,則不顯示這兩個文件的差異

2.結果說明

diff的輸出結果表明需要對一個文件做怎樣的操作之后才能與第二個文件相匹配


| ===> 表示前后2個文件內容有不同
< ===> 表示后面文件比前面文件少了1行內容
> ===> 表示后面文件比前面文件多了1行內容
a ===> add
c ===> change
d ===> delete

例如:

從圖中可以看出

3,4c3,4

這句輸出的意思就是第一個文件的第三四行需要進行改變(c=change)操作才能與第二個文件的三四行數據相同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM