Awk

使用 awk 對列中的項目進行分組

  • July 3, 2019

嘗試執行以下操作,我有 txt 文件作為介面的數據。

Eth1/15       desc01   1
Eth101/1/11   desc01   1
Eth101/1/16   desc01   1
Eth103/1/21   desc01   1
Eth1/2        desc01   1
Eth1/24       desc01   1
Eth103/1/5    desc01   1
Gi0/1         desc01   1
Gi0/0/1       desc01   1
Gi0/1/1       desc01   1

想找出常見的介面類型預期結果:

如果/包含兩次則計算匹配,否則只是Gi0Eth1

Eth1, Eth101/1, Eth103/1, Gi0, Gi0/0, Gi0/1

我嘗試使用 AWK,但沒有得到結果。 cat findint.txt | egrep 'Eth|Gi' | awk -F"/" '{print $1}'

我試過以下

cat findint.txt | egrep 'Eth|Gi' | \ awk '{print substr($1, 0, length($1)-2)}' | sort -u

結果,有些值是重複的,而我沒有。

預期成績: Eth1, Eth101/1, Eth103/1, Gi0, Gi0/0, Gi0/1

$ awk -F"/" '!seen[$1]++ {print $1}' findint.txt 
Eth1
Eth101
Eth103
Gi0

要將輸出全部放在一個逗號分隔的行中,您可以將輸出分隔符設置為ORS,但是您需要為最後一個值設置特殊情況;一種更簡單的方法是將輸出管道awk傳輸到paste

awk -F"/" '!seen[$1]++ {print $1}' findint.txt | paste -sd,

引用自:https://unix.stackexchange.com/questions/524736