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