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!