Awk: script sul percorso?
C'è un modo per mettere piccoli awkscriptoidi sul sentiero?
Ad esempio, ho questa operazione di confronto davvero utile:
// collate-csv.awk
FNR > 1 || NR == 1
E posso usarlo in tutti i tipi di ottimi modi:
xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...
L'unico problema è che non ho un modo per chiamare i miei strumenti awk da nessuna parte. Con uno script di shell eseguibile, posso rilasciarlo in una cartella bin nel percorso. Esiste un meccanismo in Linux in cui posso rendere disponibili questi file awksorgente non eseguibili da qualsiasi punto del filesystem?
(con la qualifica che il "meccanismo" non è un "perché non lo colpisci con un martello" in stile kludge)
Risposte
Oltre alla risposta di @ Roamia puoi usare la AWKPATHvariabile per un elenco di directory in cui cercarecollate-csv.awk
AWKPATH=${HOME}/include/awk:/some/other/path export AWKPATH xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...
notare che
.awkl'estensione non è obbligatoria, basta essere coerenti,- la riga shebang, ad esempio,
#!/usr/bin/awk -fè obbligatoria quando lo script è usato come script autonomo (nessunaawk -fchiamata), - dovrai usare
awk -f(e awk sa come usareAWKPATH, bash no)
Crea uno awkscript eseguibile e aggiungilo al tuo file$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"
Ora puoi usare collate-csvproprio come faresti con qualsiasi altro comando
xargs -a $(find * -name *.csv) collate-csv -F',' | ...