1

標準の 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

最も簡単な方法は、次の行に沿って何かを実行することだと考えています。行に「@」記号が含まれている場合は、行/文字列の先頭にコンマを入力し、その行/文字列を前の行に追加しますライン。誰にもアイデアはありますか?各 Web サイトに同じ数の電子メール アドレスが関連付けられていれば、より簡単になると思いますが、そうではありません。

前もって感謝します!

4

2 に答える 2

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"@行にはyes set s=","no set s="\n"(改行)が含まれていますか?

printf s"%s",$0as形式で印刷$0sます。行に@print newline が$0ある場合は 、そうでない場合は print ,$0

于 2013-10-08T19:07:21.100 に答える
1

この awk プログラムを試してください:

/^[:space:]*www\./ {
    if (f) {print line}
    f=1; line=$0; 
    next
}
f {
    line=(line "," $0)
}
于 2013-10-08T18:56:20.183 に答える