2014-01-23 2 views
0

У меня есть проблема, разделяющая строку с разделителями на трубу, содержащую последовательные пробелы, используя Unix-Script.Unix: Разделение разделителя на строку Строка, содержащая последовательные пробелы

Скажем, у меня есть файл с линиями, как

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' 

Используя этот скрипт my ou tput выглядит следующим образом:

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' 

Почему это? Мне нужны последовательные пробелы так же, как и они. Я предполагаю, что это очень сложная проблема, но мои навыки Unix не так хороши. Любая помощь очень ценится. Благодаря

+0

Say 'Эхо "$ PARAM_LINE"' вместо 'эхо $ PARAM_LINE'. – devnull

+0

Yap, который работает. Благодаря! –

ответ

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 
Смежные вопросы