Script de bash Multiplique apenas números de um arquivo de texto?

1

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

    
por abhinandanbr 26.10.2017 / 14:26

4 respostas

4

Pode usar perl

perl -pe 's/\b(\d+\.)?\d+\b/$&*100/ge' file
    
por 26.10.2017 / 14:30
1

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
    
por 27.10.2017 / 10:51
1

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.

    
por 27.10.2017 / 11:05
0

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
    
por 26.10.2017 / 15:03