Non, c'est le plus efficace que vous puissiez faire. Vous pourriez écrire un programme C qui pourrait faire le travail un peu plus rapidement (moins de temps de démarrage et de traitement des arguments) mais il tendra probablement vers la même vitesse que sed lorsque les fichiers deviendront volumineux (et je suppose qu'ils sont volumineux si cela prend une minute).
Mais votre question souffre du même problème que tant d'autres, à savoir qu'elle présuppose la solution. Si vous nous disiez en détail ce que que vous essayez de faire plutôt que comment nous pourrons peut-être vous proposer une meilleure solution.
Par exemple, s'il s'agit d'un fichier A qu'un autre programme B traite, une solution serait de ne pas supprimer la première ligne, mais de modifier le programme B pour le traiter différemment.
Supposons que tous vos programmes ajoutent des éléments à ce fichier A et que le programme B lit et traite actuellement la première ligne avant de l'effacer.
Vous pourriez réorganiser le programme B de façon à ce qu'il n'essaie pas de supprimer la première ligne mais maintienne un décalage persistant (probablement basé sur le fichier) dans le fichier A de façon à ce que, lors de sa prochaine exécution, il puisse chercher ce décalage, y traiter la ligne et mettre à jour le décalage.
Ensuite, à un moment calme (minuit ?), il pourrait effectuer un traitement spécial du fichier A pour supprimer toutes les lignes en cours de traitement et remettre le décalage à 0.
Il sera certainement plus rapide pour un programme d'ouvrir et de rechercher un fichier plutôt que d'ouvrir et de réécrire. Cette discussion suppose que vous avez le contrôle du programme B, bien sûr. Je ne sais pas si c'est le cas mais il peut y avoir d'autres solutions possibles si vous fournissez des informations supplémentaires.
0 votes
Que veut dire -i ?
4 votes
@cikatomo : il s'agit de l'édition en ligne - il édite le fichier avec ce que vous générez.
4 votes
Tail est BEAUCOUP PLUS LENTE que sed. tail a besoin de 13.5s, sed de 0.85s. Mon fichier a ~1M de lignes, ~100MB. Macbook Air 2013 avec SSD.