changer la 2ème colonne de positif à négatif et vice versa

Comment puis-je changer la 2ème colonne de positif à négatif et vice versa

aa.txt

31OCT2013:00:00:00,220.10,"O","090500 13549951" 31OCT2013:00:00:00,-0.32,"I","090500 13549964" 

La réponse devrait être

aa.txt

 31OCT2013:00:00:00,-220.10,"O","090500 13549951" 31OCT2013:00:00:00,+0.32,"I","090500 13549964" 

Si j’utilise awk

 'BEGIN{FS=OFS=","} {$2=-$2}1' aa.txt 

le résultat est

 1OCT2013:00:00:00,-220.1,"O","090500 13549951" 31OCT2013:00:00:00,+0.32,"I","090500 13549964" 

Dans le premier résultat, le signe change, mais 0 est manquant, au lieu de -220.10 , il affiche -220.1 .

Considérant que vous voulez changer la deuxième colonne en fonction de la virgule, cela peut être un moyen:

 $ awk 'BEGIN{FS=OFS=","} {$2=-$2}1' aa.txt 31OCT2013:00:00:00,-220.1,"O","090500 13549951" 31OCT2013:00:00:00,0.32,"I","090500 13549964" 

Voir

 31OCT2013:00:00:00,-220.1,"O","090500 13549951" ^ 31OCT2013:00:00:00,0.32,"I","090500 13549964" ^ 

Mettre à jour

Avec la version précédente, nous perdions des zéros, selon un comportement arithmétique. Pour le gérer correctement, nous pouvons faire:

 awk 'BEGIN{FS=OFS=","} {if ($2>0) $2="-"$2; else sub("-", "", $2)}1' file 

Si la valeur est positive, elle ajoute un tiret devant la chaîne. Sinon, il ne fait que supprimer le tiret.

Étant donné un fichier exemple

 $ cat a 31OCT2013:00:00:00,220.10,"O","090500 13549951" 31OCT2013:00:00:00,-0.32,"I","090500 13549964" 31OCT2013:00:00:00,0.300,"I","090500 13549964" 31OCT2013:00:00:00,-0.300,"I","090500 13549964" 31OCT2013:00:00:00,0,"I","090500 13549964" 

Il retourne

 $ awk 'BEGIN{FS=OFS=","} {if ($2>0) $2="-"$2; else sub("-", "", $2)}1' a 31OCT2013:00:00:00,-220.10,"O","090500 13549951" 31OCT2013:00:00:00,0.32,"I","090500 13549964" 31OCT2013:00:00:00,-0.300,"I","090500 13549964" 31OCT2013:00:00:00,0.300,"I","090500 13549964" 31OCT2013:00:00:00,0,"I","090500 13549964 
 sed 's/^\([^,]*,\)-/\1/ t s/^[^,]*,/&-/' YourFile 

Basé sur - existence

Utilisez sprintf pour formater la sortie.

 awk 'BEGIN{FS=OFS=","} {$2=sprintf("%+.2f",-$2)}1' aa.txt