UNIX:包含连续空间的斑点管道划界字符串



我在使用Unix-script的连续空间的管道划界线时遇到问题。

假设我有一个带有

之类的线的文件
Filename.txt|instancename1|PARAMETER1='C  15 K','G 7H 35'|PARAMETER2=56||PARAMETER3=TEST||instancename2|PARAMETER1='C  15 K','G 7H 35'||
...
...

到目前为止,我的Unix-Script看起来像这样(不必要的零件条纹):

#!/bin/ksh
WORKDIR=$1
FILE_WORK_DIR=somedir/$WORKDIR
PARAM_FILE=$FILE_WORK_DIR/TESTFILE.csv
while read PARAM_LINE
do
  OUT_FNAME=`echo $PARAM_LINE |cut -d'|' -f1`
  echo $PARAM_LINE |awk -F'|' '{n=split($0,col,FS);
                                for (i=2;i<=n;i++) {if (col[i] != "") print col[i]}
                               }' > $FILE_WORK_DIR/$OUT_FNAME
done < $PARAM_FILE

所需的输出应该看起来像这样:

instancename1
PARAMETER1='C  15 K','G 7H 35'
PARAMETER2=56
PARAMETER3=TEST
instancename2
PARAMETER1='C  15 K','G 7H 35'

使用此脚本,我的输出看起来像这样:

instancename1
PARAMETER1='C 15 K','G 7H 35'
PARAMETER2=56
PARAMETER3=TEST
instancename2
PARAMETER1='C 15 K','G 7H 35'

如果查看参数1,连续空间被修剪到一个空间:

PARAMETER1='**C  15 K**','G 7H 35'
PARAMETER1='**C 15 K**','G 7H 35'

为什么?我需要连续的空间。我想这是一个超级la脚的问题,但我的Unix技能并不好。任何帮助将受到高度赞赏。谢谢

不使用Awk

的方法
while IFS='|' read -A line; do
    >${line[0]}
    for item in "${line[1..-1]}"; do
            [[ -z $item ]] && continue
            echo "$item" >> ${line[0]}
    done
done < $PARAM_FILE

最新更新