Bash에서 왼쪽 열을 채우는 방법

Bash에서 왼쪽 열을 채우는 방법

다음 결과를 인쇄하는 bash 스크립트가 있습니다.

120,900
1160,001
80,730
600,165
6,310
1111,203

나는 다음과 같은 결과를 남기고 싶습니다.

 120,900
1160,001
  80,730
 600,165
   6,310
1111,203

두 번째 열의 쉼표 뒤에 3개의 숫자만 유지하기 위해 이 행을 사용했습니다.

awk '{ printf "\t" $1 "\t|\t" "%.3f\n", $2 }' MyFile.txt;

어떻게 해야 하나요?

답변1

printf대신 사용하십시오 echo:

$ cat 442817.sh
#!/bin/bash
numbers=(120,900 1160,001 80,730 600,165 6,310 1111,203)
for n in "${numbers[@]}"; do
  printf "%10s\n" "$n"
done
$ ./442817.sh
   120,900
  1160,001
    80,730
   600,165
     6,310
  1111,203

답변2

Awk해결책:

awk 'FNR == NR{ len = length; if (len > max_len) max_len = len; next }
     { printf "%" max_len "s\n", $0 }' file.txt file.txt

산출:

 120,900
1160,001
  80,730
 600,165
   6,310
1111,203

또는 GNU를 통해coreutils:

printf "%$(sort -nr file.txt | wc -L)s\n" $(cat file.txt)

답변3

$ column -t -s, file | sed 's/^\([0-9]*\)\( *\)/\2\1,/'
   120,900
  1160,001
    80,730
   600,165
     6,310
  1111,203

출력은 column다음과 같습니다

120   900
1160  001
80    730
600   165
6     310
1111  203

sed명령은 단순히 두 열 사이의 공백을 행의 시작 부분으로 이동하고 해당 위치에 쉼표를 삽입합니다.

처음 두 개의 추가 공백이 필요하지 않은 경우 다음을 사용하십시오.

$ column -t -s, file | sed -e 's/^\([0-9]*\)\( *\)/\2\1,/' -e 's/^  //'
 120,900
1160,001
  80,730
 600,165
   6,310
1111,203

관련 정보