UNIX의 소수점 중심 열

UNIX의 소수점 중심 열

모든 부동 소수점 숫자가 소수점을 기준으로 중앙에 오도록 awk 또는 다른 UNIX 도구를 사용하여 세 번째 열을 오른쪽 정렬하고 싶습니다.

Al     11.134  15.250 2.393
Al     11.134  5.825 2.393
Al     12.888  10.537 2.393

제안 사항이 있으면 알려주시기 바랍니다. 서식 지정 방법을 사용해 보았지만 부동 소수점에서는 작동하지 않는 것 같습니다.

따라서 예상되는 출력은 다음과 같습니다.

Al     11.134  15.250 2.393
Al     11.134   5.825 2.393
Al     12.888  10.537 2.393

답변1

해결책:

awk '{ for(i=1;i<=NF;i++) printf (i==1?"%s%s":"%6s%s"),$i,(i==NF? ORS:OFS) }' file

산출:

Al 11.134 15.250  2.393
Al 11.134  5.825  2.393
Al 12.888 10.537  2.393

답변2

파일 z6의 입력 데이터에 대해 코드는 다음과 같습니다.

align z6

생산하다:

Al 11.134 15.250  2.393
Al 11.134  5.825  2.393
Al 12.888 10.537  2.393

(perl) 코드 정렬 세부사항:

align   Align columns of text. (what)
Path    : ~/p/stm/common/scripts/align
Version : 1.7.0
Length  : 270 lines
Type    : Perl script, ASCII text executable
Shebang : #!/usr/bin/perl
Help    : probably available with --help
Home    : http://kinzler.com/me/align/ (doc)
Modules : (for perl codes)
 Getopt::Std    1.10

이러한 시스템에서는:

OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.9 (jessie) 
bash GNU bash 4.3.30
align 1.7.0

행운을 빕니다... 건배, drl

답변3

awk이는 's 문을 사용하여 수행할 수 있습니다 printf.

"%2.3f"작동하지 않는 이유는 %f<field-width>.<precision>다음과 같습니다.필드 너비소수점과 소수 부분을 포함한 필드의 전체 너비입니다. <precision>소수점 이하 자릿수입니다.

입력할 때 %2.3f소수점 왼쪽으로 2자리, 오른쪽으로 3자리를 원할 것입니다. 이를 달성하려면 %6.3f소수점 왼쪽에 2자리 이하의 자릿수가 있는 한 소수점을 정렬하는 를 사용하십시오.

다음을 시도해 볼 수 있습니다.

awk '{ printf "%-6s ", $1; for (i=2; i<=NF; i++) printf "%6.3f ", $i; printf "\n"; }'

다음은 가독성을 높이기 위해 형식이 지정되고 샘플 데이터를 사용하여 실행되는 동일한 코드입니다. 입력 데이터가 필드 너비보다 길 때 서식 지정 동작을 볼 수 있도록 몇 가지 추가 데이터를 추가했습니다.

$ awk '
    {
        printf "%-6s ", $1;
        for (i = 2; i <= NF; i++)
            printf "%6.3f ", $i;
        printf "\n";
    }
' <<EOF
Al     11.134  15.250 2.393
Al     11.134  5.825 2.393                                                                                                             
Al     12.888  10.537 2.393
Bundy  1.1 1.22 1.333
Jr     22.333 22.1 0.0
Longman 333.4444 4444.0 1.55555
EOF
Al     11.134 15.250  2.393 
Al     11.134  5.825  2.393 
Al     12.888 10.537  2.393 
Bundy   1.100  1.220  1.333 
Jr     22.333 22.100  0.000 
Longman 333.444 4444.000  1.556
$

자세한 내용은 및 매뉴얼 페이지를 참조하십시오 awk.printf(3)

관련 정보