Awk: Скрипты на пути?
Есть ли способ поместить awkна путь маленькие скриптоиды?
Например, у меня есть очень полезная операция сортировки:
// collate-csv.awk
FNR > 1 || NR == 1
И я могу использовать это разными способами:
xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...
Единственная проблема в том, что у меня нет возможности вызывать свои инструменты awk откуда угодно. С помощью исполняемого сценария оболочки я могу поместить его в папку bin по пути. Есть ли в Linux механизм, с помощью которого я могу сделать эти неисполняемые awkисходные файлы доступными из любого места в файловой системе?
(с оговоркой, что «механизм» - это не «почему бы тебе просто не ударить его молотком» в стиле клуджа)
Ответы
В дополнение к ответу @ Roamia вы можете использовать AWKPATHпеременную для списка каталогов, где искатьcollate-csv.awk
AWKPATH=${HOME}/include/awk:/some/other/path export AWKPATH xargs -a $(find * -name *.csv) awk -f collate-csv.awk -F',' | ...
пожалуйста, обратите внимание
.awkрасширение не обязательно, просто будьте последовательны,- например, строка shebang
#!/usr/bin/awk -fявляется обязательной, когда скрипт используется отдельно как скрипт (безawk -fвызова), - вам придется использовать
awk -f(и awk знает, как использоватьAWKPATH, bash - нет)
Создайте исполняемый awkскрипт и добавьте его в свой$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"
Теперь вы можете использовать так collate-csvже, как и любую другую команду
xargs -a $(find * -name *.csv) collate-csv -F',' | ...