Я пытаюсь разобрать данные по двум разделителям

Так что я пытаюсь сделать для этого: глядя на пример CSV:

1,3917,3917,BGP=694|Ethernet=1610|LAG=3,Y 

После запуска сценария результат должен выглядеть примерно так:

 1,3917,3917,BGP=694,Y 1,3917,3917,Ethernet=1610,Y 1,3917,3917,LAG=3,Y 

Одна строка исходного CSV-файла, содержащего дополнительные разделители, теперь преобразуется в 3 строки, потому что в пределах 4-го столбца было три дополнительных поля.

Я работаю над этим весь день, и это то, что я придумал. Это будет работать?

Код:

  #!/usr/bin/ksh if [ $# -ne 1 ]; then echo "Usage: read.sh filename"; exit 1; fi file="$1" while read line do IFS='|' set x $line while [ a -le #$] do a=a+1 echo "`$1`,`$a`" done done < $1 

Использовать AWK вместо

Эта проблема намного проще решить с AWK. Я тестировал это с помощью GNU AWK; если вы используете что-то еще, вам может понадобиться немного изменить его.

 #!/usr/bin/gawk -f BEGIN { FS = "|" } { split( $3, array, /,/ ) print $1 "," array[2] print $1 "," $2 "," array[2] print $1 "," $3 } 

Храните сценарий где-нибудь (например, parse.awk ) и убедитесь, что он выполним. Затем вы можете вызвать скрипт в CSV-файле или на стандартном входе и собрать свои результаты следующим образом:

 $ echo '1,3917,3917,BGP=694|Ethernet=1610|LAG=3,Y' | parse.awk 1,3917,3917,BGP=694,Y 1,3917,3917,BGP=694,Ethernet=1610,Y 1,3917,3917,BGP=694,LAG=3,Y