GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo cambiar un archivo en el lugar usando awk? (como con sed -i)

GNU awk (comúnmente encontrado en sistemas Linux), desde la versión 4.1.0, puede incluir un "awk biblioteca fuente" con -i o --include en la línea de comando. Una de las bibliotecas fuente que se distribuye con GNU awk es uno llamado inplace :

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

Como puede ver, esto hace que la salida del awk código reemplaza el archivo de entrada. La línea que dice there no se guarda porque el programa no lo emite.

Con un awk script en un archivo, lo usaría como

awk -i inplace -f script.awk datafile

Si el awk variable INPLACE_SUFFIX se establece en una cadena, entonces la biblioteca haría una copia de seguridad del archivo original con eso como sufijo de nombre de archivo.

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

Si tiene varios archivos de entrada, cada archivo se editará individualmente en el lugar. Pero puede desactivar la edición en el lugar para un archivo (o un conjunto de archivos) usando inplace=0 en la línea de comando antes de ese archivo:

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

En el comando anterior, file3 no se editaría en el lugar.

Para una "edición en el lugar" más portátil de un solo archivo, use

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

Esto copiaría el archivo de entrada a una ubicación temporal, luego aplicaría el awk código en el archivo temporal mientras se redirige al nombre de archivo original.

Haciendo las operaciones en este orden (ejecutando awk en el archivo temporal, no en el archivo original) garantiza que los metadatos del archivo (permisos y propiedad) del archivo original no se modifiquen.


Prueba esto.

awk  new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
  • redirigir la salida a un archivo temporal.
  • luego mueva el contenido del archivo temporal al archivo original.

Linux
  1. Cómo cambiar el límite de memoria en el archivo .htaccess

  2. ¿Cómo reemplazar una cadena en un archivo (s)?

  3. ¿Cómo se reemplaza el texto similar a sed con python?

  4. Cómo ordenar un archivo en el lugar

  5. ¿Cómo inserto texto en la primera línea de un archivo usando sed?

Cómo cambiar automáticamente el fondo de GNOME en intervalos usando BASH

Cómo quitar líneas de un archivo usando el comando Sed

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Cómo cambiar los permisos de archivo usando FileZilla

Cómo:una introducción al uso de Git

Tutorial de Unix Sed:Cómo escribir en un archivo usando Sed