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

To preserve IFS variable you could write while in the following way:

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

Also to preserve backslashes use read -r option.

于 2014-11-17T11:29:09.737 回答