AWK帮助-具有重复变量的多行输出

时间:2018-11-30 18:05:33

标签: list file variables awk

我有一个文件,其中的信息组垂直分隔。

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和第一个电子邮件行,然后忽略接下来的几个(如果存在)并转到下一个组。

如何让它遍历所有行直到没有行,然后移至下一组?

谢谢!

1 个答案:

答案 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' '...',以便字段分隔符仅是换行符。)