-n- memberi Anda urutan numerik. Ditambahkan sejak Anda menambahkannya dalam upaya Anda. Jika bidang pengguna Anda hanya teks maka Anda tidak membutuhkannya.
-k3- mendefinisikan bidang (kunci). pengguna adalah bidang ketiga.
Bagaimana cara menggunakan sortir 2 kolom? misalnya, saya ingin mengurutkan menurut kolom 6 terlebih dahulu, dan mengurutkan menurut kolom 3 detik.
pengguna2452340
1
Ini tidak akan berfungsi jika ada kutipan string yang berisi koma di CSV (kecuali kolom yang ingin Anda urutkan lebih awal dari kolom yang berisi koma). Anda mungkin harus membuat operan terlebih dahulu dengan awk (menggunakan FPAT = "[^,] * | \" [^ \ "] * \" "dan OFS =" | "atau pembatas lain yang dapat Anda gunakan dengan sort)
davemyron
1
@ user2452340 Anda dapat melakukan ini: sort -t, -nk3 filename.csv | sort -t, -nk6- pertama-tama akan mengurutkan berdasarkan kolom 3, kemudian akan mengurutkannya berdasarkan kolom 6 sehingga kolom 6 diurutkan dengan benar sepenuhnya dan untuk setiap baris yang kolom 6 sama, itu akan diurutkan berdasarkan kolom 3 .
Matius
3
@ Matius sort -t ',' -k3,3n -k6,6nakan lebih baik. -k3akan menggunakan kolom 3 dan sisa baris.
Kusalananda
1
Saya hanya perlu -t, untuk membagi file 2 kolom saya dibagi dengan koma, terima kasih jaypal
Ricardo Rivera Nieves
20
Gunakan awk untuk menempatkan ID pengguna di depan.
Menyortir
Gunakan sed untuk menghapus ID pengguna duplikat, dengan asumsi ID pengguna tidak mengandung spasi.
Ini sangat berguna, terutama jika Anda perlu mengurai atau menggabungkan kolom untuk menambahkan kolom pengurutan, lalu pertahankan hanya baris aslinya. Saya menggunakan awk / split untuk mengurai / menggabungkan bidang tanggal & waktu untuk mengurutkan, lalu menghapus.
skytaker
1
sortsudah mengetahui cara mengurutkan berdasarkan kolom tertentu, tetapi teknik ini - yang dikenal sebagai transformasi Schwartzian - berguna jika bidang yang ingin Anda sortir bukan merupakan kolom yang terdefinisi dengan baik.
tripleee
10
Anda dapat memilih pembatas, dalam hal ini saya memilih titik dua dan mencetak kolom nomor satu, mengurutkan berdasarkan urutan abjad:
sort -t, -k3 file
Jawaban:
Bagaimana dengan adil
sort
.sort -t, -nk3 user.csv
dimana
-t,
- mendefinisikan pembatas Anda sebagai,
.-n
- memberi Anda urutan numerik. Ditambahkan sejak Anda menambahkannya dalam upaya Anda. Jika bidang pengguna Anda hanya teks maka Anda tidak membutuhkannya.-k3
- mendefinisikan bidang (kunci). pengguna adalah bidang ketiga.sumber
sort -t, -nk3 filename.csv | sort -t, -nk6
- pertama-tama akan mengurutkan berdasarkan kolom 3, kemudian akan mengurutkannya berdasarkan kolom 6 sehingga kolom 6 diurutkan dengan benar sepenuhnya dan untuk setiap baris yang kolom 6 sama, itu akan diurutkan berdasarkan kolom 3 .sort -t ',' -k3,3n -k6,6n
akan lebih baik.-k3
akan menggunakan kolom 3 dan sisa baris.Gunakan sed untuk menghapus ID pengguna duplikat, dengan asumsi ID pengguna tidak mengandung spasi.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
sumber
sort
sudah mengetahui cara mengurutkan berdasarkan kolom tertentu, tetapi teknik ini - yang dikenal sebagai transformasi Schwartzian - berguna jika bidang yang ingin Anda sortir bukan merupakan kolom yang terdefinisi dengan baik.Anda dapat memilih pembatas, dalam hal ini saya memilih titik dua dan mencetak kolom nomor satu, mengurutkan berdasarkan urutan abjad:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
sumber
awk -F, '{ print $3, $0 }' user.csv | sort -nk2
dan untuk urutan terbalik
awk -F, '{ print $3, $0 }' user.csv | sort -nrk2
sumber
coba ini -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
ATAU
sort -t',' -nk3 user.csv
sumber
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Ini seharusnya berhasil
sumber
Untuk mengecualikan baris pertama (header) dari pengurutan, saya membaginya menjadi dua buffer.
df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
sumber