Arrondissement nombre flottant à l'aide de AWK
J'ai un fichier b.xyz comme,
-19.794325 -23.350704 -9.552335
-20.313872 -23.948248 -8.924463
-18.810708 -23.571757 -9.494047
-20.048543 -23.660052 -10.478968
Je veux à la limite de chacune des entrées à trois chiffres après la virgule.
J'ai essayé celui
awk '{ $1=sprintf("%.3f",$1)} {$2=sprintf("%.3f",$2)} {$3=sprintf("%.3f",$3)} {print $1, $2, $3}' b.xyz
il travaille pendant trois colonnes, mais comment l'étendre à appliquer pour n/toutes les colonnes?
Vos données de l'échantillon n'a pas de sens, 4lines d'entrée, 6 lignes de sortie? -19.794345 doit tour à -19.794, ce qu'il FAIT dans mon test, mais PAS dans votre exemple de sortie. (Je ne confirmer que le champ 3 de la ligne 1 n'a pas obtenir de l'arrondi, dont je ne comprends pas.). Veuillez mettre à jour votre question, plutôt que de répondre dans les commentaires. Bonne chance.
il imprime les lignes en double!
il imprime les lignes en double!
OriginalL'auteur user3311147 | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
Si vous aurez toujours trois champs, vous pouvez utiliser:
Pour un nombre indéterminé de lignes, vous pouvez le faire:
Il passe en boucle sur tous les champs et de les imprimer.
(i==NF?"\n":" ")
imprime une nouvelle ligne lorsque le dernier élément est atteint.Ou même (grâce Jotne!):
Exemple
(i==NF?"\n":" ")
à(i==NF?RS:FS)
et peut avoir de golf certains:awk '{for (i=1;i<=NF;i++) printf "%.3f"(i==NF?RS:FS),$i}'
Très bon, @Jotne, merci! Juste mis à jour pour refléter le fait que d'autres possibilité (à noter dans votre commentaire vous avez manqué la
%s
partie)Non, je ne manquez pas le
%s
, Si vous regardez, j'ai déplacé le(i==NF?RS:FS)
de l'autre côté de,
jusqu'à ce qu'il remplace un complément de données d'entrée, le golf de la partie.Oh, c'est vrai, @Jotne !
utilisation
'
comme décrit dans laprintf()
modificateurs. Par exemple, si je tapeLC_NUMERIC=en_US awk '{printf ("%'\''f\n", $0)}' <<< 23223.230
- je obtenir23,223.23000
.OriginalL'auteur fedorqui