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.
text-processing
awk
Olgun Kaya
sumber
sumber
... No matter of how many times a value is repeated, it should be counted as 1. ...
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 :)Jawaban:
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.Ini akan menghitung kejadian berbeda / unik di bidang 7 dan mencetak hasilnya.
sumber
sort
sebelumuniq
perintah.uniq
menghilangkan catatan mereka harus bersebelahan.Mungkin bukan metode yang paling keren, tetapi ini seharusnya bisa:
di mana
$1
nomor yang sesuai dengan bidang yang akan diuraikan.sumber
Tidak perlu mengurutkan file .. (
uniq
membutuhkan file untuk diurutkan)Script awk ini mengasumsikan bidang adalah bidang delimited spasi putih pertama.
sumber
sort
implementasi dirancang untuk mengatasi dengan baik file-file besar.