Awk: Scripts no caminho?
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
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
.awkextensã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 (semawk -fchamada), - você terá que usar
awk -f(e awk sabe como usarAWKPATH, o bash não)
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',' | ...