GNU/Linux >> Tutoriels Linux >  >> Linux

Enregistrer les modifications en place avec awk

Dans GNU Awk 4.1.0 (publié en 2013) et versions ultérieures, il a la possibilité d'éditer les fichiers "sur place":

[...] L'extension "inplace", construite à l'aide de la nouvelle installation, peut être utilisée pour simuler le GNU "sed -i " fonctionnalité. [...]

Exemple d'utilisation :

$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3

Pour conserver la sauvegarde :

$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3

Sauf si vous avez GNU awk 4.1.0 ou version ultérieure...

Vous n'aurez pas une telle option comme -i de sed option donc à la place faites :

$ awk '{print $0}' file > tmp && mv tmp file

Remarque :le -i n'est pas magique, c'est aussi créer un fichier temporaire sed gère juste pour vous.

Depuis GNU awk 4.1.0...

GNU awk ajout de cette fonctionnalité dans la version 4.1.0 (publié le 10/05/2013) . Ce n'est pas aussi simple que de simplement donner le -i option comme décrit dans les notes publiées :

La nouvelle option -i (de xgawk) est utilisée pour charger les fichiers de bibliothèque awk. Cela diffère de -f en ce que le premier argument non optionnel est traité comme un script.

Vous devez utiliser le inplace.awk fourni inclure le fichier pour invoquer l'extension correctement comme ceci :

$ cat file
123 abc
456 def
789 hij

$ gawk -i inplace '{print $1}' file

$ cat file
123
456
789

La variable INPLACE_SUFFIX peut être utilisé pour spécifier l'extension d'un fichier de sauvegarde :

$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file

$ cat file
123
456
789

$ cat file.bak
123 abc
456 def
789 hij

Je suis content que cette fonctionnalité ait été ajoutée mais pour moi, l'implémentation n'est pas très compliquée car la puissance vient de la concision du langage et de -i inplace contient 8 caractères de trop i.m.o .

Voici un lien vers le manuel pour le mot officiel.


juste une petite astuce qui marche

echo "$(awk '{awk code}' file)" > file

Linux
  1. Démarrer avec ls

  2. Remplacer la nouvelle ligne par Nul ?

  3. Avertissement avec nftw

  4. Conserver les autorisations de fichiers avec Git

  5. surveiller la taille du fichier sous linux

Commande AWK sous Linux avec des exemples

Commande Linux WC avec exemples

Signatures numériques avec GnuPG

Commande AWK sous Linux/Unix

AWK et les noms de fichiers contenant de l'espace.

Comment modifier un fichier sur place en utilisant awk ? (comme avec sed -i)