title: How to select random lines from a file
body: <p>I have a text file containing 10 hundreds of lines, with different lengths. Now I want to select N lines randomly, save them in another file, and remove them from the original file.
  I've found some answers to this question, but most of them use a simple idea: sort the file and select first or last N lines. unfortunately this idea doesn't work to me, because I want to preserve the order of lines.
  I tried this piece of code, but it's very slow and takes hours.</p>
  
  <pre><code>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}&gt;&gt;$FILEtrg; #write selected line into target file
  sed -i -e  ${X}d ${FILEsrc};       #remove selected line from source file
  LineIndex=`expr $LineIndex + 1`;
  done
  </code></pre>
  
  <p>I found this line the most time consuming one in the code:</p>
  
  <pre><code>sed -i -e  ${X}d ${FILEsrc};
  </code></pre>
  
  <p>is there any way to overcome this problem and make the code faster?
  Since I'm in hurry, may I ask you to send me complete c/c++ code for doing this?</p>