GNU/Linux >> Tutoriels Linux >  >> Linux

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

GNU awk (couramment trouvé sur les systèmes Linux), depuis la version 4.1.0, est capable d'inclure un "awk bibliothèque source" avec -i ou --include sur la ligne de commande. Une des bibliothèques source distribuée avec GNU awk est un appelé inplace :

$ cat file
hello
there
$ awk -i inplace '/hello/ { print "oh,", $0 }' file
$ cat file
oh, hello

Comme vous pouvez le voir, cela rend la sortie du awk code remplace le fichier d'entrée. La ligne indiquant there n'est pas conservé car il n'est pas sorti par le programme.

Avec un awk script dans un fichier, vous l'utiliseriez comme

awk -i inplace -f script.awk datafile

Si le awk variables INPLACE_SUFFIX est défini sur une chaîne, la bibliothèque effectuera une sauvegarde du fichier d'origine avec cela comme suffixe de nom de fichier.

awk -i inplace -v INPLACE_SUFFIX=.bak -f script.awk datafile

Si vous avez plusieurs fichiers d'entrée, chaque fichier sera édité individuellement sur place. Mais vous pouvez désactiver l'édition sur place pour un fichier (ou un ensemble de fichiers) en utilisant inplace=0 sur la ligne de commande avant ce fichier :

awk -i inplace -f script.awk file1 file2 inplace=0 file3 inplace=1 file4

Dans la commande ci-dessus, file3 ne serait pas modifié sur place.

Pour une "édition sur place" plus portable d'un seul fichier, utilisez

tmpfile=$(mktemp)
cp file "$tmpfile" &&
awk '...some program here...' "$tmpfile" >file
rm "$tmpfile"

Cela copierait le fichier d'entrée dans un emplacement temporaire, puis appliquerait le awk code sur le fichier temporaire lors de la redirection vers le nom de fichier d'origine.

Faire les opérations dans cet ordre (en exécutant awk sur le fichier temporaire, pas sur le fichier d'origine) garantit que les métadonnées de fichier (autorisations et propriété) du fichier d'origine ne sont pas modifiées.


Essayez ceci.

awk  new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
  • redirige la sortie vers un fichier temporaire.
  • puis déplacez le contenu du fichier temporaire vers le fichier d'origine.

Linux
  1. Comment changer le memory_limit dans le fichier .htaccess

  2. Comment remplacer sed comme texte par python?

  3. Comment fusionner deux fichiers avec AWK ?

  4. Comment changer l'encodage utilisé par mon serveur SFTP ?

  5. Comment supprimer un fichier sans utiliser rm ?

Comment changer automatiquement l'arrière-plan de GNOME par intervalles à l'aide de BASH

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Comment modifier les autorisations de fichiers à l'aide de FileZilla

Comment :une introduction à l'utilisation de Git

Tutoriel Unix Sed :comment écrire dans un fichier à l'aide de Sed