awk在列中找到重复项

时间:2014-02-17 04:06:50

标签: awk solaris

我在文件中有一堆dns条目

a1.us.company.com ------ DO NOT PRINT
a2.us.us.company.com ------PRINT------ ("us" is repeated)
a3.eu.a3.compamy.com ------PRINT------ ("a3" is repeated)
a4.tx.a4.tx.company.com -----PRINT------- ("a4" and "tx" is repeated)

awk 'BEGIN {FS="."; OFS="."} {if ($2==$3) print $1"."$2"."$NF}' device_list
awk 'BEGIN {FS="."; OFS="."} {if ($1==$3) print $1"."$2"."$NF}' device_list

我正在使用上面的两个命令。

有人可以给我一个awk命令,列出每行重复的列。 有些名字很疯狂,多达7到8个。分开的领域。

2 个答案:

答案 0 :(得分:3)

$ cat file
a1.us.company.com
a2.us.us.company.com
a3.eu.a3.compamy.com
a4.tx.a4.tx.company.com

$ awk -F'.' '{delete seen; for (i=1;i<=NF;i++) if (seen[$i]++) {print; next} }' file
a2.us.us.company.com
a3.eu.a3.compamy.com
a4.tx.a4.tx.company.com

请注意,使用delete seen特定于GNU-awk,使用其他awks,您可以通过split("",seen)删除整个数组。

答案 1 :(得分:1)

 $ awk -F. '{for(i=1;i<=NF;i++)if(x[$i]++){print;delete x;next}}' file
 a2.us.us.company.com 
 a3.eu.a3.compamy.com 
 a4.tx.a4.tx.company.com

如果您想在Solaris/SunOS system上尝试此操作,请将awk更改为/usr/xpg4/bin/awk/usr/xpg6/bin/awknawk