![awk の seen オプションの動作方法](https://rvso.com/image/178502/awk%20%E3%81%AE%20seen%20%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%8B%95%E4%BD%9C%E6%96%B9%E6%B3%95%20.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]
に関連付けられた配列要素の値がゼロ(または空)の場合、 のブール値は$0
!seen[$0]
真実。
キーに対応する配列の値が$0
インクリメントされ、テストは間違いそれ以外の場合は、同じ値が$0
見つかります。
その結果、テストは真実特定の行が入力で最初に現れ、間違いそれ以外の時間。
関連するアクションのないテストが実行されるたびに真実、デフォルト{ print }
アクションがトリガーされます。デフォルトのアクションはまたは と同等で{ print $0 }
、現在のレコードを出力します。この例では、すべてのアカウントと目的において、現在の変更されていない入力行が出力されます。