Awk: Scripts no caminho?

Sep 18 2020

Existe uma maneira de colocar pequenos awkscriptoids no caminho?

Por exemplo, tenho esta operação de agrupamento realmente útil:

// collate-csv.awk
FNR > 1 || NR == 1

E posso usá-lo de várias maneiras excelentes:

xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...

O único problema é que não tenho como chamar minhas ferramentas awk de lugar nenhum. Com um script de shell executável, posso colocá-lo em uma pasta bin no caminho. Existe um mecanismo no Linux onde posso disponibilizar esses awkarquivos de origem não executáveis de qualquer lugar que eu vá no sistema de arquivos?

(com a ressalva de que o "mecanismo" não é um erro do tipo "por que você não bate com um martelo")

Respostas

5 Archemar Sep 18 2020 at 21:26

Além da resposta de @Roamia, você pode usar a AWKPATHvariável para uma lista de diretórios onde procurarcollate-csv.awk

AWKPATH=${HOME}/include/awk:/some/other/path export AWKPATH xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...

Observe

  • .awk extensão não é obrigatória, apenas seja consistente,
  • linha shebang, por exemplo, #!/usr/bin/awk -fé obrigatória quando o script é usado autônomo como um script (sem awk -fchamada),
  • você terá que usar awk -f(e awk sabe como usar AWKPATH, o bash não)
3 roaima Sep 18 2020 at 20:46

Crie um awkscript executável e adicione-o ao seu$PATH

mkdir -p "$HOME/bin"
cat >"$HOME/bin/collate-csv <<'x' #!/usr/bin/awk -f # # collate-csv.awk # NR == 1 { print } FNR == 1 { next } {print} x chmod a+x "$HOME/bin/collate-csv"
export PATH="$PATH:$HOME/bin"

Agora você pode usar collate-csvcomo faria com qualquer outro comando

xargs -a $(find * -name *.csv) collate-csv -F',' | ...