Invocare uno script, che ha un shekang awk, con parametri (var)
Domanda
Ho uno script awk che ho definito in questo modo:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
L'ho salvato come colonne
e chmod + x
'd. Voglio invocarlo in modo che start
e end
siano definiti mentre attraversa un file. Stavo pensando che dovrebbe funzionare:
cat some_file | columns -v start=2
Ma non lo fa. Aiuto!
Soluzione
Prova a usare:
#!/usr/bin/awk -f
come interprete
Altri suggerimenti
env è il modo più semplice per gestire questo problema:
#!/usr/bin/env -S awk -f
per aggiungere più opzioni e per garantire nessuna interferenza con i tuoi argomenti e gli argomenti di awk:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
poiché env ha uno standard POSIX, questo shbang dovrebbe aggirare le difficoltà delle implementazioni shbang non standard su unixen.
Modifica
dopo aver scritto questo mi sono reso conto che '-S' è un'estensione env di FreeBSD non conforme a POSIX . Quindi shell wrapper è probabilmente la strada da percorrere, per quanto sfortunata.
Di seguito è la risposta per questo problema -
#!/bin/awk -f