使用 printf awk 格式化 XYZ 列时,第一个字符移至最后一个字符

使用 printf awk 格式化 XYZ 列时,第一个字符移至最后一个字符

我有一个包含 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

语句中有三个占位符printf$1被附加到换行符之后的格式字符串,因为之前没有逗号$1。字段$2$3$4格式为printf.结果是$1总是在换行符之后打印。

您可能想使用以下格式设置所有四个字段的格式printf

... | awk '{printf "%s %15s %15s %15s\n", $1, $2, $3, $4}'

相关内容