GNU/Linux >> Znalost Linux >  >> Linux

Uložte úpravy na místo pomocí awk

V GNU Awk 4.1.0 (vydáno v roce 2013) a novějších má možnost úpravy souborů „na místě“:

[...] Rozšíření "inplace" vytvořené pomocí nového zařízení lze použít k simulaci GNU "sed -i " funkce. [...]

Příklad použití:

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

Chcete-li zachovat zálohu:

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

Pokud nemáte GNU awk 4.1.0 nebo novější...

Nebudete mít takovou možnost jako sed's -i možnost, takže místo toho udělejte:

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

Poznámka:-i není kouzlo, ale také vytváří dočasný soubor sed vyřídí to za vás.

Od GNU awk 4.1.0...

GNU awk přidána tato funkce ve verzi 4.1.0 (vydáno 10.5.2013) . Není to tak přímočaré, jako když dáváte -i možnost, jak je popsáno ve vydaných poznámkách:

Nová volba -i (z xgawk) se používá pro načítání souborů knihovny awk. To se liší od -f v tom, že první argument bez možnosti je považován za skript.

Musíte použít přibalený inplace.awk include file pro správné vyvolání přípony takto:

$ cat file
123 abc
456 def
789 hij

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

$ cat file
123
456
789

Proměnná INPLACE_SUFFIX lze použít k určení přípony záložního souboru:

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

$ cat file
123
456
789

$ cat file.bak
123 abc
456 def
789 hij

Jsem rád, že tato funkce byla přidána, ale podle mě není implementace příliš nešikovná, protože síla pochází ze stručnosti jazyka a -i inplace je 8 znaků příliš dlouhé i.m.o .

Zde je odkaz na příručku za oficiální slovo.


jen malý hack, který funguje

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

Linux
  1. Zachování oprávnění k souboru s Git

  2. Jak si vyžádám soubor, ale neuložím jej pomocí Wget?

  3. Jak uložit výstup tohoto příkazu awk do souboru?

  1. tar -C se vzorem souboru zástupných znaků

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

  3. AWK a názvy souborů s mezerou.

  1. Začínáme s ls

  2. Nahradit nový řádek nulou?

  3. Je mv se zástupným znakem stále atomický