我有一个文件,其中的信息组垂直分隔。
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
但是输出显然不是我想要的,因为它只查看group_name和第一个电子邮件行,然后忽略接下来的几个(如果存在)并转到下一个组。
如何让它遍历所有行直到没有行,然后移至下一组?
谢谢!
答案 0 :(得分:1)
您可以在paragraph mode中使用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' '...'
,以便字段分隔符仅是换行符。)