2013-08-05 12 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変数を空の文字列に設定します。バックスラッシュはread -rオプションを使用し維持するために

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

また:

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

あなたは次のようにwhileを書くことができIFS変数を保持するには:このように。

+0

あなたはそのためのオスカーに値するでしょう。 – xdevs23

関連する問題