Sed 使用标识符号标识和编辑行/字符串,然后将行/字符串附加到文件中的前一行
使用标准linux实用程序(我猜是sed和awk) 很抱歉标题含糊不清,我真的不知道如何更好地描述这个请求。一种更简单的方法是提供一个简单的示例。我有一个包含以下内容的文件: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
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一点来找出原因。再次感谢!