Unix sort için -k seçeneğinin belirli bir sütuna ve aşağıdakilerin tümüne göre sıralamamıza izin verdiğini biliyorum. Örneğin, giriş dosyası verilen:
2 3
2 2
1 2
2 1
1 1
sort -n -k 1
işlevini kullanarak 1. sütuna ve ardından 2.'ye göre sıralanmış bir çıktı alıyorum:
1 1
1 2
2 1
2 2
2 3
Ancak, 2. sütun sırasını korumak istiyorum, bunun gibi:
1 2
1 1
2 3
2 2
2 1
Bu sort
komutuyla mümkün mü?
Bunu bir deneyin:
sort -s -n -k 1,1
-s
, 'son çare' sıralamasını devre dışı bırakır; bu, belirtilen bir anahtarın parçası olmayan her şeyi sıralar.
-k 1
aslında ikinci sütunda sıralamaya çalışıp çalışmadığınızı görebileceğiniz gibi sayısal sıralama bağlamında "bu alan ve aşağıdakilerin tümü" anlamına gelmez. Sadece çizginin geri kalanına giderek bağları koparıyorsunuz. Bununla birlikte, genel olarak, bir alandaki sadece sıralamak için -k 1,1
belirtmeniz gerekir.
Yalnızca ilk sütunu sıralamak için yapmanız gerekenler:
sort -n -s -k1,1
nix ve Linux Sistem Yönetimi El Kitabı
sort, -k3 (-k3,3 yerine) anahtar özelliğini kabul eder, ancak muhtemelen beklediğiniz şeyi yapmaz. Bitiş alan numarası olmadan, sıralama tuşu satırın sonuna kadar devam eder.
Verilen cevapların hiçbiri genelde benim için çalışmıyor.
Hem sort -s -k 2 file1
hem de sort -n -k1,1
bu dosya ile ek sıralama yapar:
# cat file1
3 3 5
3 2 3
1 4 7
0 1 2
3 2 1
Bu şeyi yapmak zorunda kaldım ve bir Shell döngüsü kullandım. Bu çözüm çok büyük bir dosyada iyi çalışmayabilir, çünkü dosyanın tamamının sıralanmış sütundaki her benzersiz değer için okunması gerekir.
Burada dosya yalnızca sütun 2'de sıralanır.
# awk '{print $2}' file1 | sort | uniq | while read index
do
awk -v var=$index '$2 == var { print $0}' file1
done
0 1 2
3 2 3
3 2 1
3 3 5
1 4 7