Hitung nilai berbeda dari suatu bidang dalam file


17

Saya punya file berisi sekitar jutaan jumlah baris. Di baris saya memiliki bidang yang disebut transactionid, yang memiliki nilai berulang. Yang perlu saya lakukan adalah menghitungnya dengan jelas.

Tidak peduli berapa kali suatu nilai diulang, itu harus dihitung hanya sekali.


akan lebih mudah, jika Anda bisa memberikan sekilas format file .. belum tentu datanya.
Nikhil Mulley

btw, apakah Anda ingin nilai dihitung 1 terlepas dari berapa kali itu ada, atau Anda ingin menghitung jumlah kejadian / pengulangan? jika Anda hanya ingin dihitung satu kali, lalu bagaimana nilai yang berbeda dihitung? Bisakah Anda memeriksa edit saya pada pertanyaan Anda dan mengonfirmasi apakah saya benar dalam menafsirkan.
Nikhil Mulley

@Nikhil Ini jelas dari pertanyaan:... No matter of how many times a value is repeated, it should be counted as 1. ...

ok, maka jawaban dari @hesse akan memenuhi kebutuhan Anda.
Nikhil Mulley

maaf untuk latensi. Saya kehabisan koneksi internet. seperator adalah 2 | ' dan bidang adalah bidang 28. Saya menggunakan; cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l klausa if adalah untuk pemeriksaan tanggal lain seperti yang terlihat jelas :)
Olgun Kaya

Jawaban:


23

OK, anggap file Anda adalah file teks, pisahkan bidangnya dengan pemisah koma ','. Anda juga akan tahu bidang mana 'transactionid'dalam hal posisinya. Dengan asumsi bahwa 'transactionid'bidang Anda adalah bidang ke-7.

awk -F ',' '{print $7}' text_file | sort | uniq -c

Ini akan menghitung kejadian berbeda / unik di bidang 7 dan mencetak hasilnya.


Kenapa sortsebelum uniqperintah.
g10guang

@ g10guang Karena untuk uniqmenghilangkan catatan mereka harus bersebelahan.
dsz

3

Mungkin bukan metode yang paling keren, tetapi ini seharusnya bisa:

awk '{print $1}' your_file | sort | uniq | wc -l

di mana $1nomor yang sesuai dengan bidang yang akan diuraikan.


3

Tidak perlu mengurutkan file .. ( uniqmembutuhkan file untuk diurutkan)
Script awk ini mengasumsikan bidang adalah bidang delimited spasi putih pertama.

awk 'a[$1] == "" { a[$1]="X" } END { print length(a) }' file 

Untuk file besar (seperti dalam, semakin dekat dengan ukuran RAM), awk akan mengkonsumsi banyak memori. Sebagian besar sortimplementasi dirancang untuk mengatasi dengan baik file-file besar.
Gilles 'SO- stop being evil'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.