эхо -e поведение

Вы можете сделать это с помощью примера скрипта (мой не оптимален, но будет работать)

awk -F'[]|]' '{
   print $1,$2,$3,$4,$7,$10
   print $1,$2,$3,$5,$8,$10
   print $1,$2,$3,$6,$9,$10 }' input_filename

Или

awk -F'[]|]' '{
   for (i = 4; i <= 6; i++)
     print $1,$2,$3,$i,$(i+3),$10}' input_filename

Вы можете изменить разделитель полей вывода(пробел по умолчанию ), добавив -v OFS=','.

И благодаря @steeldriver еще один гибкий способ (с внутренним разделением полей )для выполнения задания:

awk -F'|' '{
  split($3,a,/]/); n = split($4,b,/]/); 
  for(i=1;i<=n;i++) print $1,$2,a[1],a[i+1],b[i],$5}' input_filename

В соответствии с отредактированным вопросом, если вы хотите заменить пустое поле0(нулем ), вы можете сделать это с помощью скрипта, например:

awk -F'[]|]' '{ 
   for (i = 1; i <= 11; i++) if ($i == "") $i=0}
   {
   print $1,$2,$3,$4,$7,$10,$11
   print $1,$2,$3,$5,$8,$10,$11
   print $1,$2,$3,$6,$9,$10,$11 }' input_filename

Судя по вашему комментарию, скрипт должен выглядеть так:

awk -F'|' -v OFS="\t" '{
 n = split($4,D,"]"); split($5,E,"]");
 for (i = 1; i <= n; i++) {
     if (D[i] == "") D[i]=0;
     if (E[i] == "") E[i]=0;}
     print $1,$2,$3,D[i],E[i],$6,$7 }' input_file 
0
13.06.2020, 17:54
0 ответов

Теги

Похожие вопросы