Pode usar perl
perl -pe 's/\b(\d+\.)?\d+\b/$&*100/ge' file
Estou procurando um comando bash que multiplique apenas números de um arquivo de texto. Abaixo está o conteúdo do meu arquivo de texto. Eu preciso multiplicar todos os números por 100.
0 4530000 sil
4530000 11100000 ow
11100000 6320000 p
6320000 7600000 ah
7600000 8410000 n
8410000 12100000 sil
Para uma única linha com apenas um número, estou usando algo assim abaixo
for file in *.txt; \
do y='sed -n '1 p' "$file"';
z=$(bc<<<"$y*100")
sed $file -i -e 's/'"$y"'/'"$z"'/'
done
Mas eu não sei como fazer isso para várias linhas, com alfabetos nelas. Número de linhas no meu arquivo não são fixas, cada arquivo tem um número diferente de linhas com um máximo de 8
Multiplicar todos os números por 100, para números inteiros, significa adicionar 00 ao final de cada número, se > 0.
sed 's/[1-9][0-9]*/&00/g' infile
Com o GNU ou busybox
awk
, reconhecendo números como 1.2
, .123e-4
:
awk -v CONVFMT=%.19g \
-v RS='\<[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\>' \
-v ORS= 'RT != "" {RT *= 100}; {print $0 RT}'
Você pode querer adaptar CONVFMT
para o formato dos números.
Você pode usar o awk. Salve isso como parse.awk:
{
for (i = 1; i <= NF; ++i) {
number = match($i, /[0-9]+(\.[0-9]+)?/)
printf number? "%g " : "%s ", number? $i * 100 : $i
}
printf "\n"
}
E, em seguida, execute:
awk -f parse.awk file
Ou se você quiser uma linha única:
awk '{for(i=1;i<=NF;++i){n=match($i,/[0-9]+(\.[0-9]+)?/);printf n?"%g ":"%s ",n?$i*100:$i} printf"\n"}' file
Tags bash linux shell-script