모든 부동 소수점 숫자가 소수점을 기준으로 중앙에 오도록 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)