Awk: ¿Scripts en la ruta?

Sep 18 2020

¿Hay alguna forma de poner pequeños awkscriptoides en el camino?

Por ejemplo, tengo esta operación de clasificación realmente útil:

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

Y puedo usarlo de muchas maneras excelentes:

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

El único problema es que no tengo una forma de llamar a mis herramientas awk desde cualquier lugar. Con un script de shell ejecutable, puedo colocarlo en una carpeta bin en la ruta. ¿Existe algún mecanismo en Linux donde pueda hacer que estos archivos awkfuente no ejecutables estén disponibles desde cualquier lugar al que vaya en el sistema de archivos?

(con la salvedad de que el "mecanismo" no es un "¿por qué no lo golpeas con un martillo?"

Respuestas

5 Archemar Sep 18 2020 at 21:26

Además de la respuesta de @ Roamia, puede usar la AWKPATHvariable para obtener una lista de directorio donde buscarcollate-csv.awk

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

tenga en cuenta

  • .awk la extensión no es obligatoria, solo sea coherente,
  • La línea shebang, por ejemplo, #!/usr/bin/awk -fes obligatoria cuando el script se usa de forma independiente como script (sin awk -fllamada),
  • tendrás que usar awk -f(y awk sabe cómo usar AWKPATH, bash no)
3 roaima Sep 18 2020 at 20:46

Cree un awkscript ejecutable y agréguelo a su$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"

Ahora puede usarlo collate-csvcomo lo haría con cualquier otro comando

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