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
항상 개행 문자 뒤에 인쇄됩니다.
다음 형식을 사용하여 4개 필드 모두의 형식을 지정할 수 있습니다 printf
.
... | awk '{printf "%s %15s %15s %15s\n", $1, $2, $3, $4}'