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!

È stato utile?

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top