Linux / terminal altında bir düz metin dosyasında char f'nin kaç kez olduğunu saymanın bir yolu var mı?
Linux / terminal altında bir düz metin dosyasında char f'nin kaç kez olduğunu saymanın bir yolu var mı?
Yanıtlar:
Buna ne dersin:
fgrep -o f <file> | wc -l
Not: Hatırlanması / çoğaltılması ve özelleştirilmesi çok daha kolay olmasının yanı sıra, bu, Vereb'in cevabından yaklaşık üç kat daha hızlıdır (üzgünüm, düzenleyin! İlk testte başarısız oldu).
\r
ya da \n
karakterler; tr -cd f
Cevap bunun için çalışır.
a
, b
ve c
kullanımı egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
olduğu gibi tr
cevap: beri grep
çizgi ile çıkışlar hattı, wc
uçtan-hatların (dolayısıyla karakter sayısını iki katına) karakterler olarak sayılır.
\r
, ama saymak için \n
neden sadece kullanmıyorsun wc -l
?
daha hızlı:
tr -cd f < file | wc -c
4,9 MB ve 1100000 aranan karakterin geçtiği bir dosyaya sahip bu komutun zamanı :
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Vereb yanıtı için echo
, cat
ile tr
ve bc
aynı dosya için zaman:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
İle Rob Hruska cevap zamanı tr
, sed
ve wc
aynı dosya için:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
İle Jefromi yanıt için süre fgrep
ve wc
aynı dosya için:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a
, b
ve c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
bunun yerine olmaması gerekiyordu
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
A karakteri nerede
4,9 MB ve aranan karakterin 1100000 kez geçtiği bir dosyaya sahip bu komutun zamanı:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
cat
s bir argüman olarak dosya adı vererek wc
ve tr
.
stdin
, ancak bu cat
ed yerine tr -d 'A' < <file> | wc ...
Tek yapmanız gereken karakterinizin bulunduğu satır sayısını saymaksa, bu işe yarayacaktır:
grep -c 'f' myfile
Ancak, tek bir eşleşme olarak aynı satırda birden fazla "f" oluşumunu sayar.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
"A" nın iki oluşumunu kendi karakterinizle ve "dosya" yı girdi dosyanızla değiştirmek.
tr -d '\n' < file
: yeni satırları kaldırırsed 's/A/A\n/g
: "A" nın her oluşumundan sonra yeni bir satır eklerwc -l
: satır sayısını sayarMisal:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9