2016-08-16 120 views
0

我願意在文件的每一行末尾添加一個不同的隨機數。我必須重複該過程幾次,每個文件包含大約20k行,每行包含大約500k個字符。在文件的每一行的末尾添加一個隨機數

我想出了迄今唯一的解決辦法是

file="example.txt" 
for lineIndex in $(seq 1 "$(wc -l ${file})") 
do 
    lineContent=$(sed "${lineIndex}q;d" ${file}) 
    echo "${lineContent} $RANDOM" >> tmp.txt 
done 
mv tmp.txt ${file} 

是否有一個更快的解決方案?

+0

'貓$ {文件} | wc -l'是無用的貓。只需'wc -l $ {file}'。 –

+0

謝謝,那種代碼審查總是很好的!發佈編輯。 –

+0

逐行讀取文件:[Bash FAQ 001](http://mywiki.wooledge.org/BashFAQ/001) –

回答

3

您可以使用AWK:

awk '{ print $0, int(32768 * rand()) }' "$file" > tmp && \ 
    mv tmp "$file" 
+0

@ Remi.b:確保使用'srand'或者隨機數字是相同的順便說一句 – Ryan

3

你可以做到這一點更簡單,並且沒有打開和關閉輸入和輸出文件,並在每一行產生新的進程,這樣的:

while read line 
do 
    echo "$line $RANDOM" 
done < "$file" > tmp.txt 
0

你的腳本可以被改寫爲:

file="example.txt" 
cat ${file} | while read line; do 
    echo "${line} $RANDOM" 
done > tmp.txt 
mv tmp.txt ${file} 
1

用awk:

awk -v seed=$RANDOM 'BEGIN{srand(seed)} {print $0, int(rand() * 10^5+1)}' file 

如果你有GNU AWK那麼你可以使用inplace儲蓄文件:

awk -i inplace -v seed=$RANDOM 'BEGIN{srand(seed)} {print $0, int(rand() * 10^5+1)}' file 
相關問題