Ciao a tutti sono nuovo, ho un problemino:
ho la necesita di leggere un file riga per riga e stampare il valore di una riga quando trovo una stringa definita da me.
Il file si presenta in questo modo:


************************************************** ************************************************** ********************************
* LIQUIDAZIONI - RIEPILOGO DEI MANDATI AUTORIZZATI *
************************************************** ************************************************** ********************************

DATI IDENTIFICATIVI DEL FLUSSO
ENTE EROGATORE AZIENDA
DATA DI PRODUZIONE 02-04-2020
NUMERO MANDATO mandato
PERIODO DI RIFERIMENTO DEI PAGAMENTI 04-2020
CHIAVE DI CONTROLLO 000000020347502
************************************************** ************************************************** ********************************
* LIQUIDAZIONI - RIEPILOGO DEI MANDATI AUTORIZZATI *
************************************************** ************************************************** ********************************

DATI IDENTIFICATIVI DEL FLUSSO
ENTE EROGATORE AZIENDA
DATA DI PRODUZIONE 02-04-2020
NUMERO MANDATO MANDATO
PERIODO DI RIFERIMENTO DEI PAGAMENTI 04-2020
CHIAVE DI CONTROLLO 000000279604703




da questo file devo crearne un altro che per ogni volta che trova "LIQUIDAZIONI - RIEPILOGO DEI MANDATI AUTORIZZATI" mi stampa il valore delle righe contenenti la parola ENTE EROGATORE,DATA DI PRODUZIONE,PERIODO DI RIFERIMENTO DEI PAGAMENTI e CHIAVE DI CONTROLLO, su un unica riga separati da ;.
da shell con awk '{if (NR == 6 ) print $ 3, $ 4, $ 5}' AUTPV20200407.TXT mi stampa correttamente il valore "AZIENDA".


di seguito lo script che utilizzo:


prepareCSVFile()
{

# Reset delle variabili di lavoro
resetVariables
flPrimaSegnal="NO"
IFS=''
while read riga
do
echo $riga
riga=`echo $riga | sed 's/^[ \t]*//;s/[ \t]*$//'`
if [ "$riga" != "" ]
then
#riga=`echo $riga | dos2unix`
rigaParam=`echo $riga | grep "LIQUIDAZIONI - RIEPILOGO DEI MANDATI AUTORIZZATI"`
if [ $? -eq 0 ]
then
flTracciato="NO"
if [ "$flPrimaSegnal" = "SI" ]
then
#scriviRecordCSV
resetVariables
else
flPrimaSegnal="SI"
fi
fi

if [ "$flTracciato" = "SI" ]
then
ENTE_EROGANTE=`echo $riga | awk -F"ENTE EROGATORE" '{print $ 3, $ 4, $ 5}' | sed 's/^[ \t]*//;s/[ \t]*$//'`
DATA_PRODUZIONE=`echo $riga | awk -F"DATA DI PRODUZIONE" '{print $ 4}' | sed 's/^[ \t]*//;s/[ \t]*$//'`
NUM_MANDATO=`echo $riga | awk -F"NUMERO MANDATO" '{print $ 3}' | sed 's/^[ \t]*//;s/[ \t]*$//'`
PERIODO_PAGAMENTI=`echo $riga | awk -F"PERIODO DI RIFERIMENTO DEI PAGAMENTI" '{print($ 6)}' | sed 's/^[ \t]*//;s/[ \t]*$//'`
CHIAVE_CONTROLLO=`echo $riga | awk -F"CHIAVE DI CONTROLLO" '{print($ 4)}' | sed 's/^[ \t]*//;s/[ \t]*$//'`
#errDescErr=`echo -e $errDescErr`
scriviRecordCSV
#resetVariables
ENTE_EROGANTE=
DATA_PRODUZIONE=
NUM_MANDATO=
PERIODO_PAGAMENTI=
CHIAVE_CONTROLLO=
else
rigaParam=`echo $riga | grep "DATI IDENTIFICATIVI DEL FLUSSO"`
if [ $? = 0 ]
then
flTracciato="SI"

fi
fi
fi
done < $STORDIR/${GTW_fileName}
}


Con questo codice avro il seguente risultato:


nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;
nomefile;;;;;;




qualcuno sa aiutarmi a capire dove ho sbagliato?
grazie in anticipo