AWK
Alternative awk com sprintf()
:
$ awk -F ',' '{long=sprintf("%6s"," ");short=sprintf("%3s"," "); print $1long$2short$3 }' input.txt
s1 23 789
s2 25 689
E variação do tema com% regularprintf()
:
$ awk -F ',' '{printf "%s%6s%s%3s%s\n",$1," ",$2," ",$3}' input.txt
s1 23 789
s2 25 689
Ainda outra variação no tema de sprintf()
, mas com funções sub()
e gsub()
. Como sub()
edita apenas a primeira correspondência, é conveniente usá-la para substituir a primeira vírgula por 6 espaços e a outra por 3
$ awk '{sub(/\,/,sprintf("%6s",""));gsub(/\,/,sprintf("%3s",""));};1' input.txt
s1 23 789
s2 25 689
Para as pessoas que gostam de alternativas, veja outras abordagens:
Perl
$ perl -F',' -lane "print @F[0],' 'x6,@F[1],' 'x3,@F[2]" < input.txt
s1 23 789
s2 25 689
Python
$ python -c 'import sys;lines=[l.strip().split(",") for l in sys.stdin];print "\n".join([ i[0]+" "*6+i[1]+" "*3+i[2] for i in lines])' < input.txt
s1 23 789
s2 25 689
SED
$ sed -e 's/,/ /' -e 's/,/ /' input.txt
s1 23 789
s2 25 689