#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;
.