awk の seen オプションの動作方法

awk の seen オプションの動作方法

私は最近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 }、現在のレコードを出力します。この例では、すべてのアカウントと目的において、現在の変更されていない入力行が出力されます。

関連情報