以下是名为'colors.txt'
的文件中的RGB值列表255 222 0
101 153 255
255 153 0
13 112 84
13 112 84
255 222 0
13 112 84
9 112 84
我可以使用awk数组从
文件中获取5种独特的RGB组合awk '{arr[($1","$2","$3)]} END {for (i in arr) print i}' colors.txt
这给出了:
9,112,84
255,222,0
13,112,84
255,153,0
101,153,255
请注意,这些不是它们在输入文件中的顺序。但是,这个命令
awk 'arr[($1","$2","$3)]++==0 {print ($1","$2","$3)}' colors.txt
255,222,0
101,153,255
255,153,0
13,112,84
9,112,84
保留订单。这究竟是如何工作的?我找到了second command version here。
答案 0 :(得分:6)
只是为了好玩,人们可以把它组合成一个笨蛋:
awk '!A[$1=$1,$2,$3]++' OFS=, file
答案 1 :(得分:4)
这一行:
awk '{arr[($1","$2","$3)]} END {for (i in arr) print i}' colors.txt
在读取所有输入后打印哈希,并且由于哈希键不保留顺序,因此输出非常随意。
此命令:
awk 'arr[($1","$2","$3)]++==0 {print ($1","$2","$3)}' colors.txt
检查先前是否使用散列打印了相同的组合,但是,如果arr[($1","$2","$3)]
为零,它会立即打印输入。所以,没有订单保存。它更像是立即打印。
答案 2 :(得分:4)
perreal 已经解释了保留订单的原因,我想谈谈这个成语的一些细节:
hash
或h
来提醒自己其类型。gawk
和nawk
中按预期工作,即h[$1,$2,$3]
变为h[$1 SUBSEP $2 SUBSEP $3]
。 SUBSEP
的默认值为\034
或0x1c
。!h[...]++
比h[...]++==0
更具可读性,也许这只是我。OFS
而不是显式打印,即$1=$1; print
超过print ($1","$2","$3)
。所有这些结合起来:
awk '!h[$1,$2,$3]++ { $1=$1; print }' OFS=',' colors.txt