Awk: ¿Scripts en la ruta?
¿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
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
.awkla 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 (sinawk -fllamada), - tendrás que usar
awk -f(y awk sabe cómo usarAWKPATH, bash no)
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',' | ...