2013-08-05 65 views
9

我有一個源文件是多個文件合併在一起的組合。我的腳本應該將它們分成原始的單個文件。如何在shell腳本中使用echo保留主要空格?

每當我遇到以「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