com awk
:
$ awk '$2 = sprintf("%05.2f",$2)' file
num 00.12 num num
num 25.53 num num
num 07.82 num num
Eu tenho um arquivo no formato
...
num 0.12 num num
num 25.53 num num
num 7.82 num num
...
e eu quero converter o segundo campo de cada linha adicionando um "0" aos números > = 0 e < 10 então a saída terá a forma:
...
num 00.12 num num
num 25.53 num nnum
num 07.82 num num
...
Eu tentei com
sed 's/ 7./07./2'
mas não é sensível a espaços em branco, então substitui qualquer ocorrência de "7".
com awk
:
$ awk '$2 = sprintf("%05.2f",$2)' file
num 00.12 num num
num 25.53 num num
num 07.82 num num
O que você está procurando é provavelmente algo como:
sed 's/ \([0-9]\.\)/0/'
Ele corresponde a um espaço seguido por um dígito do intervalo de 0 a 9 seguido por um ponto e substitui o espaço por 0. Os parênteses \([0-9]\.\)
marcam um grupo que é referenciado por na parte de substituição do expressão.
E se você usar awk
?
$ awk '$2>0 && $2<10 {$2="0"$2}1' file
num 00.12 num num
num 25.53 num num
num 07.82 num num
Concha pura:
while read a b rest; do
b=$(printf "%05.2f" $b);
echo "$a $b $rest";
done < file.txt
Tags text-processing