我最近遇到了一个awk见过选项。我可以看到它正在删除文件中的重复项。我可以对其工作原理进行一些澄清。
cat tes
1
2
3
1
1
1
3
4
使用 awk 看到输出
cat tes | awk '!seen[$0]++'
1
2
3
4
答案1
seen
是关联数组的任意名称。这不是任何一种选择。您可以使用a
或b
或大多数其他名称来代替它。
该代码!seen[$0]++
由测试和增量组成。
如果seen[$0]
,即与当前输入行 key 关联的数组元素的值$0
为零(或空),则 的布尔!seen[$0]
值为真的。
然后数组中与该键对应的值$0
递增,这意味着测试将是错误的$0
找到相同值的所有其他时间。
测试的效果是真的第一次在输入中看到特定行,并且错误的所有其他时间。
每当没有关联操作的测试真的, 这默认动作被触发。默认操作相当于{ print }
or { print $0 }
,它打印当前记录,对于本示例中的所有帐户和目的来说,该记录是当前未修改的输入行。