É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.
linux
text-processing
awk
replace
Marcus Thornton
la source
la source
sed 's/./$&/35'
$
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.Pour réserver le Field-Seprator original, je l'ai fait. La colonne que je voulais effacer était le numéro 12 $.
Avec
gawk -i
, si vous l'avez, vous pouvez modifier le fichier en place.la source
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:
Où:
[column]
= colonne que vous souhaitez modifier en commençant par 1 (pas 0)[replace]
= texte que vous souhaitez remplacerla source
awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile
... remplacé un million d'horodatages en quelques secondes !! :)