7つの列を持つファイルがありますが、最初の4つの列を取得してawkを使用してフォーマットしたいと思います。書式なしでawkを使用すると機能しますが、printfと一緒に使用すると、最初の行の最初の文字が最後の行に移動します。
私が使う時の例sed -n "323,384p" file.xyz | awk '{print $1, $2, $3, $4}'
H 1.159798 1.491313 -0.946869
O 0.854926 2.591706 0.311355
O 1.225042 0.465961 2.017823
O 3.035434 -1.589327 2.087115
H 2.323008 -0.909968 6.144897
H 0.166459 -2.029119 3.043016
H 1.551022 -2.693028 4.563796
H 0.353505 -2.316287 5.790394
しかし、私が使うときsed -n "323,384p" file.xyz | awk '{printf "%15s %15s %15s \n" $1, $2, $3, $4}'
1.159798 1.491313 -0.946869
H 0.854926 2.591706 0.311355
O 1.225042 0.465961 2.017823
O 3.035434 -1.589327 2.087115
O 0.588302 -2.894040 1.612656
O 2.323008 -0.909968 6.144897
H 0.166459 -2.029119 3.043016
H 1.551022 -2.693028 4.563796
H 0.353505 -2.316287 5.790394
H
何らかの理由で最初に表示する必要がある文字Hは、最後の行の後に表示されます。この問題を解決する方法を知っている人はいますか?
単純化のために、xyzファイルにすべての行を置いたわけではありません。
答え1
ステートメントには3つのプレースホルダーがありますprintf
。$1
前にカンマがないため、改行文字の後のフォーマット文字列に追加されます$1
。フィールド$2
合計$3
の$4
形式はですprintf
。結果は$1
常に改行文字の後に印刷されます。
次の形式を使用して、4つのフィールドすべての形式を指定できますprintf
。
... | awk '{printf "%s %15s %15s %15s\n", $1, $2, $3, $4}'