2016-11-29 170 views
-2

我有一個.txt文件與〜80萬封電子郵件,看起來像這樣:洗牌.txt文件隨機

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
. 
. 
. 

我的目標是修改此文件,以便它看起來像這樣:

[email protected], [email protected], [email protected], [email protected] 
[email protected], [email protected] 
[email protected], [email protected] 
[email protected], [email protected], [email protected] 
[email protected], [email protected] 
[email protected], [email protected] 
[email protected], [email protected], [email protected] 
. 
. 
. 

我想要的是每行有一個隨機數量的電子郵件,用逗號或空格分隔。我真的不想寫一個程序來做到這一點,因爲我聽說可以使用某些Shell命令來完成這種工作。這是可能的,如果是這樣,我將如何實現這一目標?

+0

文件的每一行對應的朋友不同的用戶的列表。每個人都有隨機數量的朋友。 –

+0

那麼爲什麼不修復每行3或4封電子郵件? – anubhava

+0

我想我可以做到這一點,但是從現實生活的角度來看,這些人中的每一個人都只有4個朋友嗎?例如,我可能有4個朋友,但鮑勃可能有10個朋友。 –

回答

1

如果你不介意用awk,這裏是做到這一點的一種方法:

awk 'BEGIN { srand(); } { printf $0; for (i = 0; i <= int(3 * rand()); i++) { if (getline) printf ", " $0; } print ""; }' < input.txt 

的awk腳本的部分精美印刷,並評論:

BEGIN { 
    # initialize random seed 
    srand(); 
} 
{ 
    # print the next line, with terminating newline character 
    printf $0; 

    # loop 1 to 3 times 
    for (i = 0; i <= int(3 * rand()); i++) { 
    # if we can successfully read one more line 
    if (getline) { 
     # print a comma and the next line 
     printf ", " $0; 
    } 
    } 

    # print a newline character to complete the line 
    print ""; 
} 
+0

我不認爲這是問題的答案。他肯定希望重複這些電子郵件 - 單身人士可以成爲許多人的朋友。即使在這個例子中,電子郵件也會重複。您的腳本會將文件分成隨機數量的電子郵件組(每個電子郵件2至4封電子郵件)。但無論如何......它被接受了,所以也許我錯了)。 – arturro

+0

該文本沒有提及任何有關重複的內容。我在示例輸出中看到,但這可能只是一個懶散的書面示例。 – janos

1

閱讀電子郵件到一個bash數組;循環通過陣列和打印的每個元素,隨機決定輸入一個新行:

readarray -t emails < emails.txt 
for e in "${emails[@]}" 
do 
    printf "%s " "$e" 
    [[ $((RANDOM % 10)) == 0 ]] && echo 
done 
echo 
+0

當你想要一些郵件出現在不同的線路,你應該先預處理文件,複製使用$地址((RANDOM%5))。或者: 讀取兩次emails.txt並使用隨機索引從第二個數組添加其他地址。 –

+0

啊,好點 - 我錯過了OP想要複製一些電子郵件的想法;我目前的解決方案將地址混合成團塊,但只顯示一次。 –