2013-08-05 4 views
9

Ich habe eine Quelldatei, die eine Kombination aus mehreren Dateien ist, die zusammengeführt wurden. Mein Skript soll sie in die ursprünglichen einzelnen Dateien trennen.Wie behalte ich führende Leerzeichen mit Echo in einem Shell-Skript?

Immer wenn ich auf eine Zeile stoße, die mit "FILENM" beginnt, bedeutet dies, dass es der Anfang der nächsten Datei ist.

Alle Detailzeilen in den Dateien sind feste Breite; Ich habe gerade ein Problem, bei dem eine Zeile, die mit führenden Leerzeichen beginnt, abgeschnitten wird, wenn sie nicht abgeschnitten werden soll.

Wie verbessere ich dieses Skript, um die führenden Leerzeichen beizubehalten?

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 

Antwort

18

Die führenden Leerzeichen entfernt werden, weil der Eingang read in Worte aufspaltet. Um dem entgegenzuwirken, setzen Sie die Variable IFS auf eine leere Zeichenfolge. Wie folgt aus:

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

IFS Variable bewahren Sie while auf folgende Weise schreiben können:

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

Auch read -r Option zu erhalten Schrägstriche.

+0

Sie verdienen einen Oscar dafür. – xdevs23

Verwandte Themen