我有一个文本文件,其中包含10数百行,长度不同。现在我想随机选择N行,将它们保存在另一个文件中,并将它们从原始文件中删除。 我发现这个问题的一些答案,但他们大多数使用一个简单的想法:排序文件,并选择第一或最后N行。不幸的是,这个想法对我不起作用,因为我想保留行的顺序。 我试过这段代码,但它非常慢,需要数小时。如何从文件中选择随机行
FILEsrc=$1;
FILEtrg=$2;
MaxLines=$3;
let LineIndex=1;
while [ "$LineIndex" -le "$MaxLines" ]
do
# count number of lines
NUM=$(wc -l $FILEsrc | sed 's/[ \r\t].*$//g');
let X=(${RANDOM} % ${NUM} + 1);
echo $X;
sed -n ${X}p ${FILEsrc}>>$FILEtrg; #write selected line into target file
sed -i -e ${X}d ${FILEsrc}; #remove selected line from source file
LineIndex=`expr $LineIndex + 1`;
done
我发现这行最耗时的一个代码:
sed -i -e ${X}d ${FILEsrc};
有没有什么办法来克服这个问题,使代码更快吗? 因为我很匆忙,请问您可以给我发送完整的c/C++代码吗?
这可以在真正的编程语言中非常快地完成,而不仅仅是一个shell。 –
“快速方法”包括将适当的内容读入内存,操作和写入一次或读取行偏移量,执行增量计算以及一次性写入......在其他环境中都更简单,并且都利用一次写入。 – 2012-09-10 15:27:20
@dystroy:定义“真正的编程语言”。 –