2016-08-16 98 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 
相关问题