GNU/Linux >> Linux Esercitazione >  >> Linux

Come modificare un file sul posto usando awk? (come con sed -i)

GNU awk (comunemente presente sui sistemi Linux), dalla versione 4.1.0, è in grado di includere un "awk libreria sorgente" con -i o --include sulla riga di comando. Una delle librerie sorgente distribuita con GNU awk è uno chiamato inplace :

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

Come puoi vedere, questo rende l'output del awk codice sostituire il file di input. La riga che dice there non viene mantenuto in quanto non viene emesso dal programma.

Con un awk script in un file, lo useresti come

awk -i inplace -f script.awk datafile

Se awk variabile INPLACE_SUFFIX è impostato su una stringa, la libreria eseguirà un backup del file originale con quello come suffisso del nome file.

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

Se si dispone di più file di input, ogni file deve essere modificato individualmente sul posto. Ma puoi disattivare la modifica sul posto per un file (o un insieme di file) utilizzando inplace=0 sulla riga di comando prima di quel file:

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

Nel comando precedente, file3 non verrebbero modificati sul posto.

Per una "modifica sul posto" più portabile di un singolo file, usa

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

Questo copierebbe il file di input in una posizione temporanea, quindi applicherebbe il awk codice sul file temporaneo durante il reindirizzamento al nome file originale.

Eseguendo le operazioni in questo ordine (eseguendo awk sul file temporaneo, non sul file originale) garantisce che i metadati del file (autorizzazioni e proprietà) del file originale non vengano modificati.


Prova questo.

awk  new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
  • reindirizza l'output a un file temporaneo.
  • quindi sposta il contenuto del file temporaneo nel file originale.

Linux
  1. Come scrivo stderr su un file mentre uso tee con una pipe?

  2. Come sostituire il testo come sed con python?

  3. Come inserisco il testo nella prima riga di un file usando sed?

  4. Come modificare la codifica utilizzata dal mio server SFTP?

  5. Come rimuovere un file senza usare rm?

Come modificare automaticamente lo sfondo di GNOME a intervalli utilizzando BASH

Come rimuovere le righe da un file usando il comando Sed

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Come modificare le autorizzazioni dei file utilizzando FileZilla

Procedura:un'introduzione all'uso di Git

Tutorial Unix Sed:come scrivere su un file usando Sed