我有一个包含 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++ 代码来做这件事吗?