我有一個包含很多行的檔案,如下格式。
10.192.18.24 nfs3 tpq export_policy_tpq 1m 52s 25230 0
10.192.18.25 nfs3 tpq export_policy_tpq 5s 18222 0
10.192.18.26 nfs3 tpq export_policy_tpq 5m 29s 116 0
10.192.18.41 nfs3 tpq export_policy_tpq 4m 43s 9473 0
10.192.82.41 nfs3 tpq export_policy_tpq 2m 22s 12183 0
10.192.82.42 nfs3 tpq export_policy_tpq 2m 46s 33085 0
10.192.82.48 nfs3 tpq export_policy_tpq 9m 20s 7213 0
10.192.96.21 nfs3 tpq export_policy_tpq 8m 27s 49290 0
10.192.96.22 nfs3 tpq export_policy_tpq 5m 13s 15502 0
10.192.98.15 nfs3 tpq export_policy_tpq 10s 460387 0
128.59.30.7 nfs3 tpq export_policy_tpq 6m 28s 10168 0
128.59.30.8 nfs3 tpq export_policy_tpq 3m 44s 36638 0
128.59.30.9 nfs3 tpq export_policy_tpq 3m 24s 27983 0
128.59.30.11 nfs3 tpq export_policy_tpq 3m 6s 29637 0
第一列是 IP,IP 可以重復。其他列不必排序。如果第一列只是一個數字,我可以使用“sort -u k1,1”。但是,在這種情況下,IP 有 4 個數字。您能否幫助按 IP 順序對行進行排序,并洗掉重復項,僅列出具有唯一 IP 的行?
先感謝您!
uj5u.com熱心網友回復:
假設您的包含資料的檔案稱為 data.txt,您可以執行以下操作:
awk '{print $1}' data.txt | sort | uniq
awk只保留第一列,IP 地址sort: 對 IP 進行排序uniq: 洗掉重復項
如果您需要知道每個 IP 在檔案中出現的次數,您可以將選項添加-c到uniq.
uj5u.com熱心網友回復:
這應該可以單獨對每一列進行排序并使用數字順序:
awk '{print $1}' file.txt | sort -ut . -k1,1n -k2,2n -k 3,3n -k 4,4n
uj5u.com熱心網友回復:
假設您要根據 IP 地址進行排序,同時僅根據 IP 地址洗掉重復行,下面的排序和遍歷已排序檔案以洗掉重復項的代碼應該可以作業:
#!/bin/bash
originalFile=/path/to/original/file
outputFile=/path/to/intermediate/file
cleanFile=/path/to/final/file
sort $originalFile > $outputFile
lastIP=""
while read -r line; do
words=("${line// / }")
if [ "${words[0]}" != "$lastIP" ]
then
printf "%s\n" "$line" >> $cleanFile
fi
lastIP="${words[0]}"
done < $outputFile
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/434782.html
標籤:重击
