2

awk を使用してファイルに対していくつかの簡単な計算を行っていますが、出力の書式設定を正しく行うことができません。OFS は何らかの理由で最初の行にのみ適用され (つまり、BEGIN ブロック内のみ)、他の行ではフィールド間に単一のスペースが挿入されます。

入力:

title   c1  c2  c3  n
AA  14  6   3   40
BB  8   2   2   38

一発ギャグ:

cat file.txt | awk -F'\t' 'BEGIN {OFS="\t"; print "Title","Freq1","Freq2","Freq3","Total"}; NR>1{printf "%s %.3f %.3f %.3f %d\n", $1, $2/$5, $3/$5, $4/$5, $5;}' > file2.txt

BEGIN からヘッダーを削除しようとしましたが、違いはありませんBEGIN{FS="\t";OFS="\t";...}。私はcygwinでawkを使用しています。

4

1 に答える 1

8

あなたが使用しているので、printfあなたは積極的に OFS を完全に避けています。OFS を組み込みたい場合は、見苦しくなります。

NR>1 {printf "%s%s%.3f%s%.3f%s%.3f%s%d\n", $1, OFS, $2/$5, OFS, $3/$5, OFS, $4/$5, OFS, $5}

または、printf を使用しないでください。

NR>1 {print $1, sprintf("%.3f",$2/$5), sprintf("%.3f",$3/$5), sprintf("%.3f",$4/$5), $5}
于 2013-06-12T09:55:22.773 に答える