Saya mencari perintah untuk menghitung jumlah semua kata dalam file. Misalnya jika file seperti ini,
today is a
good day
maka harus dicetak 5
, karena ada 5
kata - kata di sana.
text-processing
wc
Richard
sumber
sumber
wc -w $FILE
?Jawaban:
Perintahnya
wc
alias. jumlah kata dapat melakukannya:contoh
sumber
wc -w
tidak memiliki definisi yang sama dengan GNUgrep -w
. Untukwc
kata adalah urutan satu atau lebih karakter non-spasi ([:space:]
kelas karakter di lokal saat ini). Misalnyafoo,bar
danfoo bar
(dengan ruang yang tidak putus-putus) adalah satu kata.Saya datang dengan ini hanya untuk nomor:
Saya juga suka
wc -w < [file]
pendekatannyaAkhirnya, untuk menyimpan hanya jumlah kata dalam variabel, Anda bisa menggunakan yang berikut ini:
Ini memungkinkan Anda melewatkan nama file dengan elegan.
sumber
wc -w < "$file"
untuk HANYA angkanya.Solusi yang lebih baik menggunakan Perl:
@Bernhard
Anda dapat memeriksa kode sumber
wc
perintah dari coreutils, saya menguji di mesin saya, dengan filesubst.c
dalam sumber bash 4.2.Dan
Semakin besar file, Perl semakin efisien
wc
.sumber
wc
mengambil ~ 14detik sementara Perl mengambil ~ 5detik!split
pada/\s+/
sepertisplit(' ')
kecuali bahwa setiap spasi terkemuka menghasilkan medan pertama null. Perbedaan itu akan memberi Anda satu kata ekstra (bidang nol pertama, yaitu) per tautan baris . Jadi gunakan(split(" ", $_))
sebaliknya untuk file yang dibuat seperti ini:echo -e "unix\n linux" > testfile
one-liner Anda melaporkan 3 kata.wc
akan secara signifikan lebih cepat, seperti halnya denganPERLIO=:utf8
,perl
akan secara signifikan lebih lambat.Mari kita gunakan AWK!
Ini mencantumkan frekuensi setiap kata yang muncul dalam file yang disediakan. Saya tahu itu bukan yang Anda minta, tapi lebih baik! Jika Anda ingin melihat kemunculan kata Anda, Anda bisa melakukan ini:
Saya bahkan menambahkan fungsi ini ke .dotfiles saya
Sumber: Ruby AWK-ward
sumber
The
wc
Program menghitung "kata", tetapi mereka tidak misalnya "kata" bahwa banyak orang akan melihat ketika mereka memeriksa file. Thevi
Program misalnya menggunakan ukuran yang berbeda "kata", pembatasan mereka berdasarkan kelas karakter mereka, sementarawc
hanya menghitung hal-hal yang dipisahkan oleh spasi . Kedua ukuran tersebut bisa sangat berbeda. Pertimbangkan contoh ini:vi
melihat tiga kata ( pertama dan kedua serta koma yang memisahkannya), sementarawc
melihat satu kata (tidak ada spasi putih pada baris itu). Ada banyak cara untuk menghitung kata, ada yang kurang berguna daripada yang lain.Sementara Perl akan lebih cocok untuk menulis penghitung untuk kata-kata vi-style, berikut adalah contoh cepat menggunakan
sed
,tr
danwc
(cukup portabel menggunakan pengembalian kereta literal^M
):Membandingkan jumlah:
wc
memberi 28.Untuk referensi, POSIX vi mengatakan:
sumber