여러 열에 awk '{printf...' 사용

여러 열에 awk '{printf...' 사용

여러 열 인쇄를 사용하는 방법은 무엇입니까 awk '{printf...? 그것으로 awk '{print...쉽습니다:

$ printf bar\\t5 | awk '{print $2,"baz",$1}'
5 baz bar

그러나 특정 소수 자릿수를 표시하도록 숫자 형식을 지정하려면 다른 열이 사라집니다.

$ printf bar\\t5 | awk '{printf "%.3f\n", $2,"baz",$1}'
5.000

printf서식을 지정하려는 각 열 앞에 문을 넣으려고 했지만 이로 인해 구문 오류가 발생했습니다.

$ printf bar\\t5 | awk '{printf "%.3f\n",$2, printf "%4s\n","baz", $1}'
awk: cmd. line:1: {printf "%.3f\n",$2, printf "%s\n","baz", $1}
awk: cmd. line:1:                      ^ syntax error

또는 printf각 열 앞에 형식 문자열이 없습니다.

$ printf bar\\t5 | awk '{printf "%.3f\n",$2,"%4s\n","baz", $1}'
5.000

을 사용할 때 모든 열을 표시하는 방법은 무엇입니까 awk '{printf...?

답변1

printf명령을 사용하려면 모든 형식 문자열이 먼저 각 출력 열에 하나씩 와야 하며 그런 다음 각 열에 하나씩 %입력의 열을 참조할 수 있습니다 .,

$ printf bar\\t5 | awk '{printf "%.3f,%4s|%s\n", $2,"baz",$1}'
5.000, baz|bar

형식 문자열에서 형식 문자열을 따르는 입력 열과 정확히 동일한 수의 출력 열을 참조해야 합니다. 그렇지 않으면 오류가 발생합니다(이 경우 출력 형식에는 세 개의 열이 있지만 입력 열은 두 개만 있습니다). ):

$printf bar\\t5 | awk '{printf "%.3f,%4s|%s\n", $2,"baz"}'
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: not enough arguments to satisfy format string
        `%.3f,%4s|%s
'
                  ^ ran out for this one

형식 문자열의 구분 기호는 리터럴이며 형식 문자열 뒤에 쉼표를 사용하여 입력 열을 설명합니다.

답변2

예상되는 출력을 제공하지 않지만 아마도 그렇게 하려는 것 같습니다. 즉, 1개의 출력 필드에 대한 형식을 지정하고 모든 출력 필드에 대한 형식을 나열하지 않고 가능한 한 많은 다른 출력 필드에 대해 기본 형식을 사용합니다. printf 형식 문자열의 필드:

$ printf 'bar\t5\n' | awk '{print sprintf("%.3f",$2),"baz",$1}'
5.000 baz bar

또는:

$ printf 'bar\t5\n' | awk '{$3=$1; $1=sprintf("%.3f",$2); $2="baz"} 1'
5.000 baz bar

관련 정보