2012-03-22 14 views
2

〜10,000の列を持つファイルに2つの列を追加したいとします。最初の列として各行にnr 22を挿入したいと思います。次に元の最初の列を2番目の列にし、3番目の列としてnr(NR)を挿入して、残りの元の列を印刷します。各値のために始めたawkで列を追加する。このawkコマンドで何が問題になっていますか?

awk '{print 22, $1, NR; for(i=2;i<=NF;++i) print $i}' file 

これはよく最初の3つの列(22、$ 1、NR)を印刷し、それの後に、新しい行があるので、私は、私は次のawk行でそれを行うことができると思いました

22 $1 NR 
$2 
$3 
$4 
etc... 

の代わり:

22 $1 NR $2 $3 $4 etc... 

私が間違って何をしましたファイルは、このように印刷されますか?

答えて

3

printに改行を追加すると、代わりにprintfを使用するとどうなりますか?

awk '{printf("%d, %d, %d, ", 22, $1, NR); for(i=2;i<=NF;++i) printf("%d, ", i)}' file 

それともORSOFSと遊ぶことができる、出力レコードセパレータ出力フィールド区切りgawk manual output separators

にもっと...

読むを余分printf "\n"が必要とされ、他のすべてが1行に終わること

awk 'BEGIN { ORS = " " } {print 22, $1, NR; for(i=2;i<=NF;++i) print $i}{print "\n"}' file 

注:通常は、このようなBEGIN声明のものを追加します

1

出力形式をprint(デフォルトで改行を出力する)よりも正確に制御するには、printfを使用します。

関連する問題