awk を使用した列のグループ項目

awk を使用した列のグループ項目

以下を実行しようとすると、インターフェイスデータとして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

一般的なインターフェイスタイプの期待される結果を見つけるには、次の手順を実行します。

2回含まれる場合は/一致する項目の数を計算し、そうでない場合は、Gi0またはEth1

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

ベストアンサー1

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

すべての出力を1つのカンマ区切りの行に入れるには、出力区切り記号をORSに設定できますが、,最後の値に特別なケースを作成する必要があります。より簡単な方法はawkの出力を次にパイプすることですpaste

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

おすすめ記事