No, eso es lo más eficiente que vas a conseguir. Podría escribir un programa en C que podría hacer el trabajo un poco más rápido (menos tiempo de inicio y argumentos de procesamiento), pero probablemente tenderá a la misma velocidad a medida que los archivos crecen (y supongo que son grandes si toma un minuto )
Pero su pregunta tiene el mismo problema que tantos otros, ya que supone la solución. Si nos dijera en detalle qué está tratando de hacer en lugar de cómo , podríamos sugerirle una mejor opción.
Por ejemplo, si este es un archivo A que procesa algún otro programa B, una solución sería no quitar la primera línea, sino modificar el programa B para procesarlo de manera diferente.
Digamos que todos sus programas se agregan a este archivo A y el programa B actualmente lee y procesa la primera línea antes de eliminarlo.
Puede rediseñar el programa B para que no intente eliminar la primera línea pero mantenga un desplazamiento persistente (probablemente basado en archivos) en el archivo A para que, la próxima vez que se ejecute, pueda buscar ese desplazamiento, procesar la línea allí y actualice el desplazamiento.
Luego, en un momento de silencio (¿medianoche?), Podría realizar un procesamiento especial del archivo A para eliminar todas las líneas procesadas actualmente y volver a establecer el desplazamiento en 0.
Sin duda será más rápido que un programa abra y busque un archivo en lugar de abrirlo y reescribirlo. Esta discusión supone que usted tiene control sobre el programa B, por supuesto. No sé si ese es el caso, pero puede haber otras posibles soluciones si proporciona más información.