Comando awk

di il
5 risposte

Comando awk

Ciao a tutti,
ho a che fare con dei file di testo con svariate righe, ciascuna contenente dei dati separati dal carattere '|'. Quello di cui ho bisogno è un file di testo contenete solo alcuni dati di queste righe, per fare ciò mi affido al terminale digitando il seguente comando
awk -F '|' '{print $1 "-" $2}' filesorgente.txt > filedestinazione.txt
ottenendo così il file desiderato. Il problema di tutto ciò è che faccio questo lavoro "a mano", dovrei invece creare un file .sh per poi richiamarne l'esecuzione da un programma che sto scrivendo in Java. Il problema sta nel fatto che il file .sh che ho scritto mi restituisce il seguente errore

awk: line 0: regular expression compile failed (missing operand)
|{print %s $1}


Questo il codice che ho scritto:

#!/bin/bash
awk -F '|' '{print $1 "-" $2}' $1 > output.txt
NOTA: il file da dove leggere i dati lo passo come parametro. Qualcuno sa il perchè di questo errore?
Grazie mille.

5 Risposte

  • Re: Comando awk

    $1 e $2 sono variabili speciali per lo script bash e corrispondono ai parametri passati allo script.
    Quindi: o salvi lo script awk su file esterno, invece che da linea di comando, oppure bisogna cercare come utilizzare "$1" e "$2" in uno script bash senza sostituzione.
  • Re: Comando awk

    Seguendo le indicazioni trovate qui http://stackoverflow.com/questions/7549404/bash-script-to-pass-variables-without-substitution-into-new-script devi utilizzare dei doppi apici al posto di apici singoli...
  • Re: Comando awk

    Ciao,
    forse mi sono espresso male io. Da linea di comando va tutto alla grande, il problema si presenta quando utilizzo awk in un file esterno. Comunque con i doppi apici mi restituisce il medesimo errore. Devo trovare il modo di riferire i campi all'interno del file, perché su un file esterno il simbolo $1 indica il file passato come parametro e non il primo campo all'interno di esso. Penso che l'errore sia dovuto a quello, anche se non ne sono sicuro...
  • Re: Comando awk

    Devo trovare il modo di riferire i campi all'interno del file, perché su un file esterno il simbolo $1 indica il file passato come parametro e non il primo campo all'interno di esso. Penso che l'errore sia dovuto a quello, anche se non ne sono sicuro...
    Ti ho spiegato cosa sono $1 e $2 per lo script bash per cui devi trovare un modo per evitare che lo script bash converta $1 e $2 prima di passarli allo script awk.
    Hai provato con i doppi apici e non funziona; $1 ed $2 continuano ad essere "interpretati" dallo script bash.
    L'alternativa che ti proponevo è quella di mettere lo script awk (ovvero {print $1 "-" $2}) in un file esterno, quindi quando lanci awk non specifichi lo script da linea di comando ma specifichi con -f () un file esterno che contiene tale script.
  • Re: Comando awk

    L'alternativa che ti proponevo è quella di mettere lo script awk (ovvero {print $1 "-" $2}) in un file esterno, quindi quando lanci awk non specifichi lo script da linea di comando ma specifichi con -f () un file esterno che contiene tale script.
    Avevo capito male! Ora funziona, grazie mille!
Devi accedere o registrarti per scrivere nel forum
5 risposte