1. 程式人生 > >Shell命令-文件及內容處理之sort、uniq

Shell命令-文件及內容處理之sort、uniq

文本 刪除 分隔 出現 使用 發表 結果 bcd 錯誤

文件及內容處理 - sort、unip

1. sort:對文件的文本內容排序

sort命令的功能說明

sort 命令用於將文本文件內容加以排序。sort 可針對文本文件的內容,以行為單位來排序。

sort命令的語法格式

sort [OPTION]... [FILE]...
sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字符>][+<起始欄位>-<結束欄位>][--help][--verison][文件]

sort命令的常用參數說明:

split 參數很多,表1為 sort 命令的參數及說明:

表1: sort 命令的參數及說明

參數選項 解釋說明
-b 忽略每行前面開始出的空格字符。
-c 檢查文件是否已經按照順序排序。
-d 排序時,處理英文字母、數字及空格字符外,忽略其他的字符。
-f 排序時,將小寫字母視為大寫字母。
-i 排序時,除了040至176之間的ASCII字符外,忽略其他的字符。
-m 將幾個排序好的文件進行合並。
-M 將前面3個字母依照月份的縮寫進行排序。
-n 依照數值的大小排序。
-o <輸出文件> 將排序後的結果存入指定的文件。
-r 以相反的順序來排序。
-t <分隔字符> 指定排序時所用的欄位分隔字符。
+ <起始欄位>-<結束欄位> 以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
--help 顯示幫助。
--version 顯示版本信息。

sort命令的實踐操作

範例1: 在使用 sort 命令以默認的式對文件的行進行排序,使用的命令如下:


--------------------------------------------------------------
==&gt;testfile文件原有排序 &lt;==
--------------------------------------------------------------
[[email protected] ~]# cat testfile       
test 30  
Hello 95  
Linux 85 

==>重排結果<==

[[email protected] ~]# sort testfile
Hello 95
Linux 85
test 30


## 2. uniq:去除重復行

>**uniq命令的功能說明**

>> `uniq` 命令用於檢查及刪除文本文件中重復出現的行列,一般與 `sort` 命令結合使用。`uniq` 可檢查文本文件中重復出現的行列。

>**uniq命令的語法格式**

>>`uniq` [OPTION]... [INPUT [OUTPUT]]
>>`uniq` [-cdu][-f<欄位>][-s<字符位置>][-w<字符位置>][--help][--version][輸入文件][輸出文件]

>**uniq命令的常用參數說明:**

>>`uniq` 參數不多,表1為 `uniq` 命令的參數及說明:

>**表1:** `uniq` 命令的參數及說明

參數選項|解釋說明
:--|:--
-c或--count |在每列旁邊顯示該行重復出現的次數。
-d或--repeated  |僅顯示重復出現的行列。
-f<欄位>或--skip-fields=<欄位>  |忽略比較指定的欄位。
-s<字符位置>或--skip-chars=<字符位置> | 忽略比較指定的字符。
-u或--unique  |僅顯示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> | 指定要比較的字符。
--help | 顯示幫助。
--version | 顯示版本信息。
[輸入文件]  |指定已排序好的文本文件。如果不指定此項,則從標準讀取數據;
[輸出文件] | 指定輸出的文件。如果不指定此選項,則將內容顯示到標準輸出設備(顯示終端)。

>**uniq命令的實踐操作**

>**範例1:**   文件testfile中第 2、3、5、6、7、9行為相同的行,使用 `uniq` 命令刪除重復的行,可使用以下命令:

==>原有內容 <==

[[email protected] ~]# cat testfile
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85


==>刪除重復行後的內容<==

[[email protected] ~]# uniq testfile
test 30
Hello 95
Linux 85

>**範例2:**  檢查文件並刪除文件中重復出現的行,並在行首顯示該行重復出現的次數。使用如下命令:

[[email protected] ~]# uniq -c testfile <-->刪除重復行後的內容
3 test 30 <-->前面的數字的意義為該行共出現了3次
4 Hello 95 <-->前面的數字的意義為該行共出現了4次
2 Linux 85 <-->前面的數字的意義為該行共出現了2次

>**範例3:**  當重復的行並不相鄰時,`uniq` 命令是不起作用的,即若文件內容為以下時,`uniq` 命令不起作用:

==>原有內容 <==

[[email protected] ~]# cat testfile1
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85


==>這時我們就可以使用 sort<==

[[email protected] ~]# sort testfile1 | uniq
Hello 95
Linux 85
test 30


==>統計各行在文件中出現的次數:<==

[[email protected] ~]# sort testfile1 | uniq -c
3 Hello 95
3 Linux 85
3 test 30


==>在文件中找出重復的行:<==

[[email protected] ~]# sort testfile1 | uniq -d
Hello 95
Linux 85
test 30



>**今天就寫到這裏,有什麽疑問或出現什麽錯誤,隨時歡迎大神們發表評論指點迷津**

Shell命令-文件及內容處理之sort、uniq