我在使用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技能并不是那么好。 任何帮助都非常感谢。 感谢
答案 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