2013-08-05 3 views
9

У меня есть исходный файл, который представляет собой комбинацию нескольких файлов, которые были объединены вместе. Мой скрипт должен отделить их от исходных отдельных файлов.Как сохранить ведущие пробелы с эхом в сценарии оболочки?

Всякий раз, когда я сталкиваюсь с линией, начинающейся с «FILENM», это означает, что это начало следующего файла.

Все строчные строки в файлах фиксированной ширины; поэтому я столкнулся с проблемой, когда строка, начинающаяся с ведущих пробелов, усекается, когда она не должна быть усечена.

Как увеличить этот скрипт, чтобы сохранить ведущие пробелы?

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 

ответ

18

Ведущие пробелы удаляются, потому что read разделяет входные слова. Чтобы встретить это, установите для переменной IFS пустую строку. Как это:

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

Чтобы сохранить IFS переменную можно записать while следующим образом:

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

Кроме того, чтобы сохранить обратные косые использовать read -r вариант.

+0

Вы заслуживаете оскара за это. – xdevs23

Смежные вопросы