Il existe plusieurs solutions pour supprimer les lignes vides d'un fichier texte, sous GNU/Linux. Voyons quelle méthode utilise le moins de ressources et de temps :

# Trick to speed-up future commands
export LANG=C

# words.lst contains 14,344,393 lines.

$ grep . < words.lst > words-ok.lst
# 2,55s user 0,14s system 48% cpu 5,552 total

$ awk /./ words.lst > words-ok.lst
# 5,70s user 0,15s system 53% cpu 10,859 total

# /!\ Ne pas utiliser l'option -i sur de gros fichiers /!\
$ sed '/^$/d' words.lst > words-ok.lst
# 8,33s user 0,18s system 62% cpu 13,714 total

À noter que sed supprime les lignes vides uniquement, tandis que grep et awk suppriment aussi les lignes qui ne contiennent que des caractères non imprimables.

Graphique benchmark suppression lignes vides
Graphique par ChartGo

Conclusion

Méthode la plus rapide :

grep . < fichier > fichier-ok

Historique

  • 2017-12-10 : ajout de l'astuce LANG=C.
  • 2015-05-31 : ajout du graphique.