14

マージされた複数のファイルの組み合わせであるソース ファイルがあります。私のスクリプトは、それらを元の個々のファイルに分離することになっています。

「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
4

2 に答える 2

22

readは入力を単語に分割するため、先頭のスペースは削除されます。これに対抗するには、IFS変数を空の文字列に設定します。このような:

OLD_IFS="$IFS"
IFS=
while read line         
do
    ...
done <$filePath/sourcefile
IFS="$OLD_IFS"
于 2013-08-05T09:56:11.950 に答える
13

変数を保持するには、次のようにIFS記述できます。while

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

また、バックスラッシュを保持するには、read -rオプションを使用します。

于 2014-11-17T11:29:09.737 に答える