AWK help - многострочный вывод с повторяющимися переменными - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть файл с группами информации, разделенными по вертикальным линиям.

group_name  
email1  
email2  
email3

group_name2  
email1  
email2  

group_name3  
email1

и т. Д.

Мне нужна помощь, чтобы получить его для вывода в файл в этомформат:

group_name email1  
group_name email2  
group_name email3  
group_name2 email1  
group_name2 email2   
group_name3 email1

и т.д ...

в настоящее время я запускаю эту команду:

$ awk 'BEGIN{FS="\n"; RS=""} {print $1,$2}' output.txt > output2.txt  

но вывод, очевидно, не то, что я ищупоскольку он только смотрит на имя_группы и первую строку электронной почты, затем игнорирует следующие несколько (если они существуют) и переходит к следующей группе.

Как сделать так, чтобы это перебирало все строки, пока их не было, а затем переходило к следующей группе?

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Вы можете использовать awk в режиме абзаца и делать:

$ echo "group_name
email1
email2
email3

group_name2
email1
email2

group_name3
email1

" | awk -v RS= '{for (i=2;i<=NF;i++) {printf "%s ", $i;} print ""}'

Печать:

group_name email1 email2 email3 
group_name2 email1 email2 
group_name3 email1 

Или ваш формат:

echo "group_name
email1
email2
email3

group_name2
email1
email2

group_name3
email1

" | awk -v RS= '{for (i=2;i<=NF;i++) {printf "%s %s\n", $1, $i;}}'

Отпечатки:

group_name email1
group_name email2
group_name email3
group_name2 email1
group_name2 email2
group_name3 email1

Затем просто перенаправьте stdout в нужный выходной файл:

$ awk -v RS= '{for (i=2;i<=NF;i++) {printf "%s %s\n", $1, $i;}}' in_file >out_file

(Если в названии группы есть возможность горизонтальных пробеловили имена электронной почты, добавьте awk -v RS= -v FS=$'\n' '...', чтобы разделитель полей был только новой строкой.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...