Линия разрыва после сопоставления шаблона с awk

#awk

#авк

Вопрос:

У меня есть такой файл

 A 1,2,3,4
B 1
C 1,2 
 

Я хотел бы получить с помощью awk этот вывод :

 A 1
A 2
A 3
A 4
B 1 
C 1 
C 2
C 3
 

пробный код:

 sed 's/,/namp;/g' file
 

Есть какие-нибудь идеи с awk?

Комментарии:

1. Пожалуйста, добавьте свои усилия в виде кода в свой вопрос, который настоятельно рекомендуется на SO, спасибо.

2. На самом деле, я пытался использовать sed ‘s /, / n amp; / g’, но я не получил то, что хочу..

3. Конечно, спасибо, что проявили свои усилия, пожалуйста, добавьте их в свой вопрос в ТЕГАХ КОДА.

Ответ №1:

Не могли бы вы, пожалуйста, попробовать следующее, используя концепцию разделения нескольких полей, написанную и протестированную с показанными примерами в GNU awk .

 awk 'BEGIN{FS="[ ,]"} {for(i=2;i<=NF;i  ){print $1,$i}}' Input_file
 

2-е решение: разделение 2-го значения поля.

 awk '{num=split($2,arr,",");for(i=1;i<=num;i  ){print $1,arr[i]}}' Input_file
 

Ответ №2:

Хммм:

 $ awk '{gsub(/,/,ORS $1 OFS)}1' file
 

Вывод:

 A 1
A 2
A 3
A 4
B 1
C 1
C 2 
 

И если вы действительно хотите, чтобы ЭТОТ вывод был получен из ЭТОГО ввода, вам нужно добавить END{print "C 3"} в конце…

Редактировать Пожалуйста, смотрите комментарий @EdMorton о подводном камне.

Комментарии:

1. Просто имейте в виду, что это приведет к сбою, если $1 будет содержаться amp; .