Conversion de valeurs dans des champs particuliers sous UNIX

Les valeurs suivantes sont présentes dans un fichier

A|0001|.00|xyz|.00 B|0002|1.00|xyz|.00 C|0003|12.43|xyz|.00 

Je veux les valeurs dans le fichier de sortie comme

 A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|0003|12.43|xyz|0.00 

Comment cela peut il etre accompli?

    En supposant que vous voulez normaliser les nombres dans ces colonnes pour avoir toujours une partie entière et deux chiffres significatifs, cela devrait faire ce que vous voulez:

     awk -v FS=\| -v OFS=\| '{$3=sprintf("%.2f", $3); $5=sprintf("%.2f", $5)}7' file $ cat file A|0001|.00|xyz|.00 B|0002|1.00|xyz|.00 C|0003|12.43|xyz|.00 D|0004|.54|xyz|1 $ awk -v FS=\| -v OFS=\| '{$3=sprintf("%.2f", $3); $5=sprintf("%.2f", $5)}7' file A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|0003|12.43|xyz|0.00 D|0004|0.54|xyz|1.00 

    Par Perl,

     $ perl -pe 's/\B(?=\.)/0/g' file A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|0003|12.43|xyz|0.00 

    Par sed,

     $ sed -r 's/\|\./|0./g' file A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|0003|12.43|xyz|0.00 

    Voici un autre awk

     awk -F\| '$3~/^\./ {$3="0"$3} $5~/^\./ {$5="0"$5}1' OFS=\| file A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|0003|12.43|xyz|0.00