Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/06/2020, à 13:07

kevino_linux

Remplacer sélectivement valeur dans une colonne

Bonjour à tous,

J'ai un fichier avec +400.000 lignes de 27 colonnes chacune, représenté comme tel :

252.858306  1052.392741     0.093979     0.093979 000001@Extract/job065/Movies/20190221_1125_A017_G000_H374_D001.mrcs MotionCorr/job003/Movies/20190221_1125_A017_G000_H374_D001.mrc            1     4.687843     0.112025  7942.572266  7465.865723    15.252215     0.000000     1.000000    30.369515

J'aimerai remplacer la colonne 7 (le 1 en gras ci dessus) par un "2", et ce, sur toutes les lignes. Je ne maîtrise pas totalement Awk, j'imagine qu'il faut passer par ça mais je bloque.

Merci à celui / celle qui voudra bien m'aider.
Bonne journée

Hors ligne

#2 Le 23/06/2020, à 13:36

pingouinux

Re : Remplacer sélectivement valeur dans une colonne

Bonjour,
Si tu veux remplacer la colonne 7 par 2 :

awk '{$7=2;print}' fichier

Si tu veux ajouter 1 à la colonne 7 :

awk '{$7+=1;print}' fichier

Hors ligne

#3 Le 23/06/2020, à 13:39

kevino_linux

Re : Remplacer sélectivement valeur dans une colonne

Merci infiniment c'est exactement ce qu'il me fallait !! smile

Dernière modification par kevino_linux (Le 23/06/2020, à 13:40)

Hors ligne

#4 Le 23/06/2020, à 13:39

sputnick

Re : Remplacer sélectivement valeur dans une colonne

Avec awk:

awk '{$7=2;print}' fichier | tee new_fichier

Ensuite si c'est ok:

 mv new_fichier fichier

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 23/06/2020, à 13:41

MicP

Re : Remplacer sélectivement valeur dans une colonne

Bonjour

Pour remplacer tout le contenu du septième champ de chaque ligne du fichier nomFichier par le chiffre 2 :

awk '{$7=2;print}' nomFichier

Pour remplacer, dans le contenu du septième champ de chaque ligne du fichier nomFichier, chaque chiffre 1 par le chiffre 2 :

awk '{gsub(1,2,$7);print}' nomFichier

Là, ça ne fait qu'afficher le fichier modifié à l'écran,
mais si tu veux que que le remplacement soit fait dans le fichier,
alors rajoute à la fin de la ligne de commande
| tee nomFichier

Dernière modification par MicP (Le 23/06/2020, à 15:47)

Hors ligne

#6 Le 23/06/2020, à 13:54

pingouinux

Re : Remplacer sélectivement valeur dans une colonne

@MicP #6 :
Attention, ta première commande efface le fichier d'origine.

Hors ligne

#7 Le 23/06/2020, à 14:00

MicP

Re : Remplacer sélectivement valeur dans une colonne

pingouinux a écrit :

…Attention, ta première commande efface le fichier d'origine.

Oui, c'était le but (EDIT : je n'avais pas bien compris, je pensais juste remplacer l'original, mais ça ne fonctionne pas),
mais je me disais aussi qu'il valait mieux le faire d'abord afficher à l'écran,
alors j'ai modifié mon message

Dernière modification par MicP (Le 24/06/2020, à 11:56)

Hors ligne

#8 Le 23/06/2020, à 14:11

kamaris

Re : Remplacer sélectivement valeur dans une colonne

Houlà ! Mauvaise idée !

commande fichier | tee fichier

lit et écrit en parallèle dans fichier…

Il faut passer par un fichier temporaire :

commande fichier >fichier.tmp && mv fichier.tmp fichier

Hors ligne

#9 Le 23/06/2020, à 15:46

MicP

Re : Remplacer sélectivement valeur dans une colonne

Houlà ! Mauvaise idée !

Oui, effectivement : ça vide le fichier de son contenu => fichier à zéro octet.

Je supprime cette suggestion dans mon précédent message.

Hors ligne

#10 Le 24/06/2020, à 11:53

kevino_linux

Re : Remplacer sélectivement valeur dans une colonne

Merci à tous pour vos réponses rapides et concises smile

Hors ligne