msort(1)
çok satırlı kayıtlara sahip dosyaları sıralayabilmek için tasarlanmıştır. İsteğe bağlı bir GUI'nin yanı sıra normal ve insanlar için kullanılabilir bir komut satırı sürümüne sahiptir. (En azından, el kitaplarını dikkatlice okumayı ve örnekler aramayı seven insanlar ...)
AFAICT, kayıtlarınız için rastgele bir desen kullanamazsınız, bu nedenle kayıtlarınız sabit boyutlu değilse (karakter veya satır değil bayt cinsinden). boş satırlarla ayrılmış satır blokları olan kayıtlar için msort
bir -b
seçenek vardır.
Girdilerinizi -b
her şeyden önce boş bir satır koyarak ###...
(birincisi hariç) oldukça kolay çalışacak bir formata dönüştürebilirsiniz .
Varsayılan olarak, stderr'deki istatistikleri yazdırır, bu yüzden en azından tüm girdinin tek bir kayıt olduğunu düşündüğü için sıralanmadığı zamanı söylemek kolaydır.
msort
verileriniz üzerinde çalışır. sed
Komut her bir yeni satır başa ekler #+
1. hat dışında hat -w
sıralar bütün kaydı (sözlük sırasında). Bir kaydın hangi kısmını anahtar olarak kullanacağınızı seçmek için seçenekler var, ancak onlara ihtiyacım yoktu.
Ayrıca ekstra satırsonu sıyırdı.
$ sed '2,$ s/^#\+/\n&/' unsorted.records | msort -b -w 2>/dev/null
####################################
KEY1
VAL11
VAL12
VAL13
VAL14
####################################
KEY2
VAL21
VAL22
VAL23
VAL24
####################################
KEY3
VAL31
VAL32
VAL33
VAL34
Bunu -r '#'
kayıt ayırıcı olarak kullanmakta şansım olmadı . Tüm dosyanın tek bir kayıt olduğunu düşünüyordu.