Shell命令-文件及內容處理之sort、uniq
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
命令以默認的式對文件的行進行排序,使用的命令如下:-------------------------------------------------------------- ==>testfile文件原有排序 <== -------------------------------------------------------------- [[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