在文件的每一行的末尾添加一个随机数
问题描述:
我愿意在文件的每一行末尾添加一个不同的随机数。我必须重复该过程几次,每个文件包含大约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}
是否有一个更快的解决方案?
答
您可以使用AWK:
awk '{ print $0, int(32768 * rand()) }' "$file" > tmp && \
mv tmp "$file"
+0
@ Remi.b:确保使用'srand'或者随机数字是相同的顺便说一句 – Ryan
答
你可以做到这一点更简单,并且没有打开和关闭输入和输出文件,并在每一行产生新的进程,这样的:
while read line
do
echo "$line $RANDOM"
done < "$file" > tmp.txt
答
你的脚本可以被改写为:
file="example.txt"
cat ${file} | while read line; do
echo "${line} $RANDOM"
done > tmp.txt
mv tmp.txt ${file}
答
用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
'猫$ {文件} | wc -l'是无用的猫。只需'wc -l $ {file}'。 –
谢谢,那种代码审查总是很好的!发布编辑。 –
逐行读取文件:[Bash FAQ 001](http://mywiki.wooledge.org/BashFAQ/001) –