Comment remplacer le contenu d'une colonne spécifique par awk?


31

Étant donné: il y a 40 colonnes dans un enregistrement. Je veux remplacer la 35e colonne afin que la 35e colonne soit remplacée par le contenu de la 35e colonne et un symbole "$". Ce qui m'est venu à l'esprit est quelque chose comme:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

Cela fonctionne mais parce que c'est irréalisable lorsque le nombre de colonnes est aussi grand que 10k. J'ai besoin d'une meilleure façon de procéder.

Réponses:



8

Il existe probablement des moyens plus efficaces de procéder. Avec cette mise en garde:

awk '{$35 = $35"$"; print}' infile > outfile

3

Si le délimiteur de champ est <space>:

sed 's/  */$&/35'

Si le délimiteur de champ est inconnu:sed 's/./$&/35'
— Underverse

@ Underverse - Je ne pense pas que ce soit la même chose. Cela devrait préfixer le 35e caractère sur une ligne d'entrée avec $ou non délimité par des caractères. La chose ci-dessus devrait apposer la 35ème occurrence de n'importe quel nombre de caractères de délimitation - en d'autres termes, le 35ème champ - avec le caractère $- peu importe comment les caractères sont dans chaque champ.
— mikeserv

Ah, "40 colonnes dans un record". J'ai lu «la 35e colonne» comme littéralement «la 35e colonne de caractères du fichier texte».
— Underverse

3

Pour réserver le Field-Seprator original, je l'ai fait. La colonne que je voulais effacer était le numéro 12 $.

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

Avec gawk -i, si vous l'avez, vous pouvez modifier le fichier en place.


1

En cas de problème avec les réponses "approuvées", cela remplacerait plus que la première colonne du fichier. J'utilise cette commande générique:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

Où:

  • [column] = colonne que vous souhaitez modifier en commençant par 1 (pas 0)
  • [replace] = texte que vous souhaitez remplacer

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... remplacé un million d'horodatages en quelques secondes !! :)
— roblogic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.