2013-10-08 40 views
1

使用標準的Linux工具(sed和awk,我猜)使用識別符號識別和編輯行/字符串,然後追加行/字符串前行的文件

很抱歉的模糊標題,我不不知道如何更好地描述請求。一個簡單的方法是提供一個簡單的例子。我有以下內容的文件:

 www.example.com 
     [email protected] 
     [email protected] 
     [email protected] 
     www.example2.com 
     [email protected] 
     www.example3.com 
     [email protected] 
     [email protected] 
     www.example4.com 
     [email protected] 
     [email protected] 
     [email protected] 
     [email protected] 
     [email protected] 

所以,我想要做的是轉換上面:

 www.example.com,[email protected],[email protected],[email protected] 
     www.example2.com,[email protected] 
     www.example3.com,[email protected],[email protected], 
     www.example4.com,[email protected],[email protected],[email protected],[email protected],[email protected] 

我想,最容易做的事情是要執行什麼沿着以下幾行:如果行中包含「@」符號,請在行/字符串的開頭輸入逗號,然後將該行/字符串追加到前一行。有人有主意嗎?我認爲,如果每個網站都有統一數量的電子郵件地址,那將會更簡單,但事實並非如此。

在此先感謝!

+0

我們可以依靠,總會有相當於www.example * .com分隔你想放在一行上的組?我認爲這個問題是因爲'如果在當前行中沒有@標誌,我們開始創建一個新列表,將以下任何記錄追加到當前行,直到找到下一行不帶@符號'。祝你好運! – shellter

回答

1

試試這個awk程序:

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

一個url不需要包含'www',但所有的電子郵件都有'@' – Jotne

2

一個簡單的方法

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

www.example.com,[email protected],[email protected],[email protected] 
www.example2.com,[email protected] 
www.example3.com,[email protected],[email protected] 

s=/@/?",":"\n"線是否含有@是設置s=","沒有設置s="\n"(新行)。

printf s"%s",$0 print $0使用s作爲格式。如果行有@打印換行符,然後$0,如果不打印,,然後$0

+0

這個工作完美。現在我將不得不深入awk來找出原因。再次感謝! – user2859760

+0

更新信息如何工作。 – Jotne