Como deixar uma coluna no Bash?

1

Eu tenho um script bash que imprime os seguintes resultados:

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

Eu gostaria de deixar o pad para que o resultado seja:

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

Eu já uso essa linha para manter apenas três números após a vírgula na segunda coluna

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

Como posso conseguir isso?

    
por Rania MALK 09.05.2018 / 18:07

3 respostas

1

Use printf em vez de 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
    
por 09.05.2018 / 18:14
0

Awk solução:

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

A saída:

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

Ou via GNU coreutils :

printf "%$(sort -nr file.txt | wc -L)s\n" $(cat file.txt)
    
por 09.05.2018 / 18:22
0
$ column -t -s, file | sed 's/^\([0-9]*\)\( *\)/,/'
   120,900
  1160,001
    80,730
   600,165
     6,310
  1111,203

A saída column será

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

e o comando sed apenas move os espaços entre as duas colunas para o início da linha e insere a vírgula em seu lugar.

Se os dois espaços extras iniciais não forem desejados, use

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