Comment multiplier un fichier de données .txt par un nombre constant?

9

J'ai un fichier .txt avec une colonne. il s'agit d'environ 8 000 numéros. Comment puis-je multiplier cette colonne de données par 1000000?

OE
la source
3
Si les nombres sont strictement entiers, alorssed 's/$/000000/' file.txt
glenn jackman
6
@glennjackman: Cela ressemble à une réponse. : -]
David Foerster
Et si les nombres ne sont pas des nombres entiers?
copper.hat

Réponses:

24

Vous pouvez utiliser la awkcommande:

awk '{print $1*1000000}' file.txt
N0rbert
la source
16

Si les nombres dans le fichier sont des entiers ou de simples valeurs à virgule flottante, vous pouvez utiliser l' numfmtutilitaire avec --from-unit=pour indiquer la mise à l'échelle souhaitée.

Ex. donné

$ cat file
1.23
5
3.45
17
6.78
23

puis

$ numfmt --from-unit=100000 < file
123000.00
500000
345000.00
1700000
678000.00
2300000

Vous pouvez ajouter une variété de printfformats de style à la sortie, par exemple

$ numfmt --from-unit=100000  --format="%'12.2f" < file
  123,000.00
  500,000.00
  345,000.00
1,700,000.00
  678,000.00
2,300,000.00

Alternativement, avec sedet bc:

sed 's/$/ * 100000/' file | bc

ou (variante de polissage inversé)

sed 's/$/ 100000 * p/' file | dc
tournevis
la source
Cela devrait-il être bcdans la dernière commande ou est- dcce autre chose?
PerlDuck
3
@PerlDuck dcest autre chose - voir par exemple En quoi bc est-il différent de dc?
steeldriver
LOL, je n'ai pas lu assez attentivement et pensé au poli comme pour faire quelque chose de brillant . Ty pour avoir expliqué.
PerlDuck
3
Ha, donc "polir à l'envers", c'est "faire quelque chose de moins brillant (plus boueux)"? OMI, DC répond à cette exigence
Glenn Jackman
Voir ce lien, Wikipedia: Notation polonaise inversée - Cela est devenu populaire dans les années 1970 avec le HP-35, la première calculatrice scientifique portable au monde, et la série de calculatrices suivante.
sudodus