GNU/Linux >> Znalost Linux >  >> Linux

Jak změnit soubor na místě pomocí awk? (jako u sed -i)

GNU awk (běžně se vyskytuje v systémech Linux), od verze 4.1.0, je schopen zahrnout "awk zdrojová knihovna" s -i nebo --include na příkazovém řádku. Jedna ze zdrojových knihoven, která je distribuována s GNU awk se nazývá inplace :

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

Jak můžete vidět, výsledkem je awk kód nahradit vstupní soubor. Řádek říká there se neuchová, protože jej program nevypisuje.

S awk skript v souboru, použijete jej jako

awk -i inplace -f script.awk datafile

Pokud je awk proměnná INPLACE_SUFFIX je nastaven na řetězec, pak by knihovna vytvořila zálohu původního souboru s příponou názvu souboru.

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

Máte-li několik vstupních souborů, pak každý soubor lze individuálně upravit na místě. Úpravy na místě však můžete u souboru (nebo sady souborů) vypnout pomocí inplace=0 na příkazovém řádku před tímto souborem:

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

Ve výše uvedeném příkazu file3 nebude upraveno na místě.

Pro přenosnější „úpravu na místě“ jednoho souboru použijte

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

To zkopíruje vstupní soubor do dočasného umístění a poté použije awk kód na dočasném souboru při přesměrování na původní název souboru.

Operace provádějte v tomto pořadí (spuštění awk na dočasný soubor, nikoli na původní soubor) zajišťuje, že metadata souboru (oprávnění a vlastnictví) původního souboru nebudou změněna.


Zkuste toto.

awk  new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
  • přesměrovat výstup do dočasného souboru.
  • pak přesuňte obsah dočasného souboru do původního souboru.

Linux
  1. Jak nahradit řetězec v souboru (souborech)?

  2. Jak zapíšu stderr do souboru při použití tee s potrubím?

  3. Jak třídit soubor na místě

  1. Jak změnit limit_paměti v souboru .htaccess

  2. Jak dosáhnout přenositelnosti pomocí Sed -i (úpravy na místě)?

  3. Jak podložit soubor pomocí FF pomocí dd?

  1. Jak nahradit text podobný sedu pythonem?

  2. Jak sloučit dva soubory pomocí AWK?

  3. Jak vložím text do 1. řádku souboru pomocí sed?