簡介
sort
和 uniq
都是 Linux 系統中常用的文本處理命令。
-
sort
命令用于對文件內容進行排序。 -
uniq
命令用于去除文件中重復出現的行。
1. sort
命令
命令格式
sort [選項] [文件]
-
選項
: -
-n
: 按照數字進行排序 -
-r
: 反向排序 -
-c
: 統計每個元素出現的次數 -
-t 分隔符
: 指定分隔符,默認為空格 -
-k 列號
: 指定排序列,從左到右從 1 開始計數 -
-u
: 僅顯示不重復的行
命令功能
sort
命令可以對文件內容進行排序,支持多種排序方式,包括:
-
按數字排序
-
按字符串排序
-
按自定義列排序
-
正序排序
-
反序排序
命令用法
1. 按數字排序
sort numbers.txt
例如,將文件 numbers.txt
中的內容按數字從小到大排序:
10
2
5
4
3
2. 按字符串排序
sort words.txt
例如,將文件 words.txt
中的內容按字母順序排序:
apple
banana
cherry
grape
orange
3. 按自定義列排序
sort -k 3 students.txt
例如,將文件 students.txt
中的內容按第三列(成績)從高到低排序:
張三,15,90
李四,18,80
王五,17,70
趙六,16,60
4. 正序排序
默認情況下,sort
命令會對文件內容進行正序排序。
sort numbers.txt
5. 反向排序
sort -r numbers.txt
例如,將文件 numbers.txt
中的內容按數字從大到小排序:
10
5
4
3
2
6. 統計每個元素出現的次數
sort -c words.txt
例如,統計文件 words.txt
中每個單詞出現的次數:
2 apple
1 banana
1 cherry
2 grape
1 orange
7. 指定分隔符
sort -t : students.txt
例如,將文件 students.txt
中的內容按第一列(姓名)排序,并使用冒號作為分隔符:
張三:15:90
李四:18:80
王五:17:70
趙六:16:60
8. 僅顯示不重復的行
sort -u words.txt
例如,顯示文件 words.txt
中不重復的單詞:
apple
banana
cherry
grape
orange
2. uniq
命令
命令格式
uniq [選項] [文件]
-
選項
: -
-c
: 統計每個元素出現的次數 -
-d
: 顯示重復的行 -
-u
: 僅顯示不重復的行
命令功能
uniq
命令用于去除文件中重復出現的行,支持多種操作,包括:
-
僅顯示不重復的行
-
顯示重復的行
-
統計每個元素出現的次數
命令用法
1. 僅顯示不重復的行
uniq words.txt
例如,顯示文件 words.txt
中不重復的單詞:
apple
banana
cherry
grape
orange
2. 顯示重復的行
uniq -d words.txt
例如,顯示文件 words.txt
中重復出現的單詞:
apple
banana
3. 統計每個元素出現的次數
uniq -c words.txt
例如,統計文件 words.txt
中每個單詞出現的次數:
2 apple
1 banana
1 cherry
2 grape
1 orange
運維案例
案例一:統計網站日志中的訪問次數
假設您需要統計網站日志文件 /var/log/nginx/access.log
中每個 IP 地址的訪問次數。
步驟:
- 提取 IP 地址:
cat /var/log/nginx/access.log | awk '{print $1}' > ips.txt
- 排序并去除重復的 IP 地址:
sort -u ips.txt > unique_ips.txt
- 統計每個 IP 地址的訪問次數:
for ip in $(cat unique_ips.txt); docount=$(grep -c "$ip" /var/log/nginx/access.log)echo "$ip $count"
done > ip_counts.txt
結果:
192.168.1.10 100
192.168.1.11 50
192.168.1.12 20
案例二:比較兩個文件的差異并忽略空白行
假設您需要比較兩個文件 /file1.txt
和 /file2.txt
的差異,并忽略空白行。
步驟:
- 刪除兩個文件中的空白行:
sed -i '/^ *$/d' file1.txt
sed -i '/^ *$/d' file2.txt
- 比較兩個文件并忽略重復行:
comm -3 file1.txt file2.txt | grep -v '^$'
結果:
+ line1
- line2
案例三:從多個文件中提取唯一內容
假設您需要從多個文件(file1.txt
、file2.txt
、file3.txt
)中提取唯一內容。
步驟:
- 將多個文件的內容合并到一個文件中:
cat file1.txt file2.txt file3.txt > all_lines.txt
- 排序并去除重復行:
sort -u all_lines.txt > unique_lines.txt
結果:
line1
line2
line3
注意:
-
本文檔僅介紹了
sort
和uniq
命令的基本使用方法和常見運維案例,并未涵蓋所有功能和參數。 -
在使用
sort
和uniq
命令進行實際操作時,請注意備份文件,以免造成數據丟失。 -
可以根據實際需要組合使用
sort
和uniq
命令,實現更復雜的功能。
希望這份文檔能夠幫助您更好地了解和使用 sort
和 uniq
命令。