awkでcsvの最初の数列を削除する

 

というcsvデータの最初の数カラムを次のように削除したい場合がある

カラム数が決まっている場合はcutで範囲指定してやればよいが、カラム数が決まっていなかったりどうしてもawkを使いたい場合は困る。そこでhttp://www.dollpaper.com/tips/257 を参考に(と言ってもOFSを事前に設定するようにしただけだが)

これで期待通りの動作するが、何故動作するのかわからなかったのでメモ

動作説明

注:awkは入力を1行ずつ処理するという事を理解しておく

awkの詳しい説明: http://d.hatena.ne.jp/zariganitosh/20131209/minimum_awk

区切り文字設定

入力区切り文字を「,」、出力区切り文字を「,」に設定

出力の解釈

NFには今処理している行のフィールド総数が入っている(awkの組み込み変数)、つまりNFは4。これで条件が満たされる限り中括弧内を繰り返す。

1つのフィールドを表示する。awkでは $数値 とすると今処理している行の指定フィールド内容として処理される。つまり1行目処理時の$3は hoge。printfはC言語の仕様と同様。

for文の条件でNFより小さいフィールドまでしか表示されないので、ループ終了後に最終フィールドを表示する。

コメントを残す