使用标准的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
我认为最简单的方法是执行以下操作:如果行包含“@”符号,请在行/字符串的开头输入逗号,然后追加该行/字符串到前一行。有人有主意吗?我认为,如果每个网站都有统一数量的电子邮件地址,那会更简单,但事实并非如此。
提前致谢!
答案 0 :(得分:2)
一种简单的方法
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",$0
使用$0
作为格式打印s
。如果行有@
打印换行符,则为$0
,如果不打印,
,则为$0
答案 1 :(得分:1)
试试这个awk程序:
/^[:space:]*www\./ {
if (f) {print line}
f=1; line=$0;
next
}
f {
line=(line "," $0)
}