Unix:Spliting pipe分隔包含连续空格的String

时间:2014-01-23 09:30:04

标签: string shell parsing unix ksh

我在使用Unix脚本拆分包含连续空格的管道分隔线时遇到问题。

假设我有一个像

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

到目前为止,我的Unix脚本看起来像这样(不必要的部分条纹):

#!/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'

如果你看PARAMETER1连续空间被修剪到一个空格:

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

为什么?我需要连续的空间。 我想这是一些超级蹩脚的问题,但我的Unix技能并不是那么好。 任何帮助都非常感谢。 感谢

1 个答案:

答案 0 :(得分:0)

不使用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