Saya memiliki file dua kolom; file disortir seperti yang saya inginkan pada kolom 1 sudah. Saya ingin mengurutkan pada kolom 2, dalam setiap kategori kolom 1. Namun, sort
tidak mengerti urutan pengurutan kolom 1.
Cara biasa (dari pertanyaan serupa di stack) adalah sebagai berikut:
sort --stable -k1,1 -k2,2n
Tapi saya tidak bisa menentukan jenisnya pada k1, karena ini arbitrer.
Contoh input:
C 2
C 1
A 2
A 1
B 2
B 1
dan output:
C 1
C 2
A 1
A 2
B 1
B 2
seq 30 | xargs -L1 bash -cs 'yes $1 | head -1000000 | paste - <(seq 1000000) | shuf' bash
Anda dapat menggunakan transformasi Schwartzian (ini pada dasarnya adalah pendekatan menghias-sort-tidak-dekorasi yang Anda singgung dalam komentar, tetapi kemungkinan lebih berkinerja daripada jawaban baik muru karena menggunakan doa tunggal sebagai lawan dari banyak) - menggunakan tambahkan kolom awalan yang kenaikan dengan perubahan nilai di kolom pertama, urutkan berdasarkan kolom awalan diikuti oleh kolom "kedua" (yang posisi ordinalnya telah sementara bergeser karena adanya kolom awalan), dan akhirnya singkirkan kolom awalan
sort
awk
3
sumber
awk -v OFS="\t" '$1 != prev { key++ } { print key, $0; prev = $1 }
(belum diuji).