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항상 개행 문자 뒤에 인쇄됩니다.

다음 형식을 사용하여 4개 필드 모두의 형식을 지정할 수 있습니다 printf.

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

관련 정보