【问题标题】:AWK help - multi-line output with repeated variablesAWK 帮助 - 具有重复变量的多行输出
【发布时间】:2019-05-02 21:54:31
【问题描述】:

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

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

如何让这个循环遍历所有行,直到没有行,然后移动到下一组?

谢谢!

【问题讨论】:

    标签: list file variables awk


    【解决方案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' '...',以便字段分隔符仅是一个新行。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多