![awk see 選項如何運作](https://rvso.com/image/178502/awk%20see%20%E9%81%B8%E9%A0%85%E5%A6%82%E4%BD%95%E9%81%8B%E4%BD%9C.png)
我最近遇到了一個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 }
,它會列印目前記錄,對於本範例中的所有帳戶和目的來說,該記錄是目前未修改的輸入行。