Awk: Des scripts sur le chemin?
Existe-t-il un moyen de mettre de petits awkscriptoïdes sur le chemin?
Par exemple, j'ai cette opération de classement vraiment utile:
// collate-csv.awk
FNR > 1 || NR == 1
Et je peux l'utiliser de toutes sortes de bonnes manières:
xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...
Le seul problème est que je n'ai aucun moyen d'appeler mes outils awk de n'importe où. Avec un script shell exécutable, je peux le déposer dans un dossier bin sur le chemin. Existe-t-il un mécanisme sous Linux où je peux rendre ces fichiers awksources non exécutables disponibles de n'importe où dans le système de fichiers?
(avec la qualification que le "mécanisme" n'est pas un "pourquoi ne pas le frapper avec un marteau" -style kludge)
Réponses
En plus de la réponse de @ Roamia, vous pouvez utiliser une AWKPATHvariable pour une liste de répertoires où cherchercollate-csv.awk
AWKPATH=${HOME}/include/awk:/some/other/path export AWKPATH xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...
Notez s'il vous plaît
.awkl'extension n'est pas obligatoire, soyez juste cohérent,- la ligne shebang, par exemple,
#!/usr/bin/awk -fest obligatoire lorsque le script est utilisé seul comme script (pas d'awk -fappel) - vous devrez utiliser
awk -f(et awk sait comment utiliserAWKPATH, bash non)
Créez un awkscript exécutable et ajoutez-le à votre$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"
Vous pouvez maintenant utiliser collate-csvcomme vous le feriez pour n'importe quelle autre commande
xargs -a $(find * -name *.csv) collate-csv -F',' | ...