Awk: Skripte auf dem Weg?
Gibt es eine Möglichkeit, kleine awkScriptoids auf den Weg zu bringen?
Zum Beispiel habe ich diese wirklich nützliche Kollatierungsoperation:
// collate-csv.awk
FNR > 1 || NR == 1
Und ich kann es auf alle möglichen Arten nutzen:
xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...
Das einzige Problem ist, dass ich meine awk-Tools von nirgendwo aus aufrufen kann. Mit einem ausführbaren Shell-Skript kann ich es in einem bin-Ordner auf dem Pfad ablegen. Gibt es unter Linux einen Mechanismus, mit dem ich diese nicht ausführbaren awkQuelldateien von jedem Ort im Dateisystem aus verfügbar machen kann?
(mit der Qualifikation, dass der "Mechanismus" kein Kludge im "Warum schlägst du ihn nicht einfach mit einem Hammer" -Stil ist)
Antworten
Zusätzlich zur Antwort von @ Roamia können Sie eine AWKPATHVariable für eine Liste der Verzeichnisse verwenden, nach denen gesucht werden sollcollate-csv.awk
AWKPATH=${HOME}/include/awk:/some/other/path export AWKPATH xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...
bitte beachten Sie
.awkVerlängerung ist nicht obligatorisch, nur konsequent sein,- Die Shebang-Zeile ist zB
#!/usr/bin/awk -fobligatorisch, wenn das Skript als eigenständiges Skript verwendet wird (keinawk -fAufruf). - Sie müssen verwenden
awk -f(und awk wissen, wie man verwendetAWKPATH, Bash nicht)
Erstellen Sie ein ausführbares awkSkript und fügen Sie es Ihrem hinzu$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"
Jetzt können collate-csvSie wie jeden anderen Befehl verwenden
xargs -a $(find * -name *.csv) collate-csv -F',' | ...