web-dev-qa-db-fra.com

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

É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.

33
Marcus Thornton

Vous pouvez faire comme ça:

awk '$35=$35"$"'
39
cuonglm

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

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

Pour réserver le séparateur de champ d'origine, 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.

5
zee

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

sed 's/  */$&/35'
3
mikeserv

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
1
Jason G