У меня есть текстовый файл, содержащий 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/С++ для этого?