まくまくsed/awkノート
awk で指定したフィールドを削除する
2015-10-27

例えば、下記のような入力テキストファイルがあったとします。

input.txt

A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
C1 C2 C3 C4 C5

この各行から 3 番目のフィールド (A3, B3, C3) をそれぞれ削除したい場合は、次のように $3 に空文字を代入してから全てのフィールド $0 を出力すれば OK です(print $0$0 は省略できます)。

$ awk '{$3 = ""; print}' input.txt
A1 A2  A4 A5
B1 B2  B4 B5
C1 C2  C4 C5

もちろん、次のように出力するフィールドをすべて指定することもできます。

$ awk '{print $1, $2, $4, $5}' input.txtk
A1 A2 A4 A5
B1 B2 B4 B5
C1 C2 C4 C5

ちなみに、print に対してカンマで複数のフィールドを渡すと、組み込み変数 OFS の値で区切られて出力されます。OFS のデフォルトの値は、スペース 1 文字なので、上記のようにスペース区切りで表示されるというわけです。

$ awk 'BEGIN {OFS=","} {print $1, $2, $4, $5}' input.txtk
A1,A2,A4,A5
B1,B2,B4,B5
C1,C2,C4,C5
2015-10-27