Comment sortinger en ignorant la ligne vide

J’ai une donnée qui ressemble à ceci

|201451| |201441| |201431| |201421| 

Je dois sortinger pour

 |201421| |201431| |201441| |201451| 

J’ai essayé d’utiliser les deux:

 sort -t"|" -k4.5,4.6 -b data LC_ALL=c sort -t"|" -k4.5,4.6 -b data 

mais ça me donne toujours

  |201421| |201431| |201441| |201451| 

Je veux conserver l’espace avec la valeur sortingée. Comment puis-je le faire ??

Fondamentalement, je dois ignorer l’espace de ligne et ne pas les supprimer …

Essayez d’exécuter:

 sort -t"|" -k4.5,4.6 data | grep -v "^$" | awk '{print $0"\n"}' 

Voici une solution avec le sorting en supprimant d’abord les lignes vierges puis en insérant les lignes vierges en utilisant sed :

 grep -v '^$'  | sort -t'|' -k 4.5,4.6 | sed 's/$/\n/' 

Vous pouvez accomplir ce dont vous avez besoin en menant avec un awk qui vérifie simplement s’il y a du contenu sur la ligne – puis suivez-le avec un sort adapté à votre cas particulier:

 $ awk '$1' data_file | sort some blah! blah!|201421|some blah! blah! some blah! blah!|201431|some blah! blah! some blah! blah!|201441|some blah! blah! some blah! blah!|201451|some blah! blah!