スポンサーリンク
for文でn列目以降を出力するのが楽
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
列変数を使って、$1,$2,$3,,,というようにprint出力するのもできますが、
手間もかかり限界もありますね。
参考:awkの$0,$1,$2,$3,変数で列の操作
for文を使うと良いと思いますが、ポイントを書いてみます。
1行の列数はNF変数で取得できるので、下記のように、i <= NFとloop条件を指定します。 参考:awkのNF変数で列数に応じた処理をする
for(i = startRow; i <= NF; i++){ printf $i 〜省略〜 } 〜省略〜
また、print出力だと改行が入るので、printfを使うと良いですね。
更に、printfなので区切り文字の設定も必要ですね。今回はカンマにしました。
そして、最終列を除外して区切り文字を出力する必要もあります。
for(i = startRow; i <= NF; i++){ 〜省略〜 #最終列を除外して、区切り文字を出力 if(i != NF){ printf "," } } 〜省略〜
1行毎に、改行も必要なので、下記のように設定します。
参考:awkのprintfで改行を付与する
for(i = startRow; i <= NF; i++){ 〜省略〜 } #改行をする printf "\n"
スポンサーリンク
サンプルコード
例えば、下記のin.txtがあったとします。
$ cat in.txt 1 awk find grep 5 2 ls cp mv 2 3 or and not 3 $ cat sample.awk
下記がサンプルコードになります。
2列目以降を出力しています。
#!/bin/sh cat in.txt | awk ' BEGIN{ startRow = 2 } { for(i = startRow; i <= NF; i++){ printf $i #最終列を除外して、区切り文字を出力 if(i != NF){ printf "," } } #改行をする printf "\n" } '
下記が実行結果になります。
$ ./sample.awk awk,find,grep,5 ls,cp,mv,2 or,and,not,3
スポンサーリンク