使用 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

想找出常见的接口类型预期结果:

如果/包含两次则计算匹配次数,否则仅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

答案1

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

要将输出全部放在一个逗号分隔的行中,您可以将输出分隔符设置ORS为,,但是您需要为最后一个值制作特殊情况;一种更简单的方法是将awkto的输出通过管道传输paste

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

相关内容