2013-08-05 11 views
9

Ho un file sorgente che è una combinazione di più file che sono stati uniti. Il mio script dovrebbe separarli nei singoli file originali.Come si conservano gli spazi bianchi iniziali con echo su uno script di shell?

Ogni volta che incontro una linea che inizia con "FILENM", significa che è l'inizio del file successivo.

Tutte le righe di dettaglio nei file sono a larghezza fissa; quindi, al momento sto riscontrando un problema in cui una riga che inizia con i principali spazi bianchi viene troncata quando non si suppone venga troncata.

Come si migliora questo script per mantenere gli spazi bianchi iniziali?

while read line   
do   
    lineType=`echo $line | cut -c1-6` 
    if [ "$lineType" == "FILENM" ]; then 
     fileName=`echo $line | cut -c7-` 
    else 
     echo "$line" >> $filePath/$fileName 
    fi 
done <$filePath/sourcefile 

risposta

18

Gli spazi iniziali vengono rimossi perché read divide l'input in parole. Per contrastare ciò, impostare la variabile IFS sulla stringa vuota. Come questo:

OLD_IFS="$IFS" 
IFS= 
while read line   
do 
    ... 
done <$filePath/sourcefile 
IFS="$OLD_IFS" 
7

Per preservare IFS variabile si potrebbe scrivere while nel seguente modo:

while IFS= read line 
do 
    . . . 
done < file 

anche per preservare backslash utilizzare read -r opzione.

+0

Ti meriti un oscar per quello. – xdevs23

Problemi correlati