Sed 使用标识符号标识和编辑行/字符串,然后将行/字符串附加到文件中的前一行

Sed 使用标识符号标识和编辑行/字符串,然后将行/字符串附加到文件中的前一行,sed,awk,append,delimiter,Sed,Awk,Append,Delimiter,使用标准linux实用程序(我猜是sed和awk) 很抱歉标题含糊不清,我真的不知道如何更好地描述这个请求。一种更简单的方法是提供一个简单的示例。我有一个包含以下内容的文件: www.example.com johnsmith@gmail.com fredflintstone@gmail.com bettyboop@gmail.com www.example2.com kylejohnson@gmail.com

使用标准linux实用程序(我猜是sed和awk)

很抱歉标题含糊不清,我真的不知道如何更好地描述这个请求。一种更简单的方法是提供一个简单的示例。我有一个包含以下内容的文件:

      www.example.com
      johnsmith@gmail.com
      fredflintstone@gmail.com
      bettyboop@gmail.com
      www.example2.com
      kylejohnson@gmail.com
      www.example3.com
      chadbrown@gmail.com
      joshbeck@gmail.com
      www.example4.com
      tomtom@gmail.com
      jeffjeffries@gmail.com
      billnorman@gmail.com
      stankubrick@gmail.com
      andrewanders@gmail.com
因此,我要做的是将上述内容转换为:

      www.example.com,johnsmith@gmail.com,fredflintstone@gmail.com,bettyboop@gmail.com
      www.example2.com,kylejohnson@gmail.com
      www.example3.com,chadbrown@gmail.com,joshbeck@gmail.com,
      www.example4.com,tomtom@gmail.com,jeffjeffries@gmail.com,billnorman@gmail.com,stankubrick@gmail.com,andrewanders@gmail.com
我认为最简单的方法是按照以下行执行:如果行包含“@”符号,请在行/字符串的开头输入逗号,然后将该行/字符串附加到前一行。有人有什么想法吗?我认为,如果每个网站都有统一数量的电子邮件地址,情况会简单一些,但事实并非如此

提前谢谢

试试这个awk程序:

/^[:space:]*www\./ {
    if (f) {print line}
    f=1; line=$0; 
    next
}
f {
    line=(line "," $0)
}
简单的方法

awk '{s=/@/?",":"\n";printf s"%s",$0}' file

www.example.com,johnsmith@gmail.com,fredflintstone@gmail.com,bettyboop@gmail.com
www.example2.com,kylejohnson@gmail.com
www.example3.com,chadbrown@gmail.com,joshbeck@gmail.com
s=/@/?”,“:“\n”
行是否包含
@
是集
s=“,”
否集
s=“\n”
(换行符)


printf s“%s”,使用
s
作为格式打印
0
。如果行中有
@
打印换行符,那么
$0
,如果没有打印
,那么
$0

我们可以相信,总是会有相当于www.example*.com的方法将您要放在一行中的组分隔开吗?我认为这个问题是“如果当前行上没有@符号,我们将开始创建一个新列表,在当前行上附加任何以下记录,直到找到下一行没有@符号”。祝你好运url不需要包含
www
,但所有电子邮件都有
@
,这非常有效。现在,我将不得不深入了解awk一点来找出原因。再次感谢!