Có cách nào trong linux / terminal để đếm không, bao nhiêu lần char f xảy ra trong một tệp văn bản thuần túy?
Có cách nào trong linux / terminal để đếm không, bao nhiêu lần char f xảy ra trong một tệp văn bản thuần túy?
Câu trả lời:
Còn cái này thì sao:
fgrep -o f <file> | wc -l
Lưu ý: Bên cạnh việc dễ nhớ / sao chép và tùy chỉnh dễ dàng hơn nhiều, điều này gấp khoảng ba lần (xin lỗi, chỉnh sửa! Đã thực hiện bài kiểm tra đầu tiên) nhanh hơn câu trả lời của Vereb.
\r
hoặc \n
ký tự; các tr -cd f
câu trả lời làm việc cho điều đó.
a
, b
và c
, sử dụng egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
như trong tr
câu trả lời: vì grep
đầu ra từng dòng, wc
sẽ tính cuối dòng là ký tự (do đó nhân đôi số ký tự).
\r
, nhưng để đếm \n
tại sao không chỉ sử dụng wc -l
?
thậm chí nhanh hơn:
tr -cd f < file | wc -c
Thời gian cho lệnh này với một tệp có 4,9 MB và 1100000 lần xuất hiện của ký tự được tìm kiếm:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Thời gian cho Vereb câu trả lời với echo
, cat
, tr
và bc
cho cùng một tập tin:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Thời gian cho Rob Hruska câu trả lời với tr
, sed
và wc
cho cùng một tập tin:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Thời gian để Jefromi trả lời với fgrep
và wc
cho cùng một tệp:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a
, b
và c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
thay thế
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
trong đó A là nhân vật
Thời gian cho lệnh này với một tệp có 4,9 MB và 1100000 lần xuất hiện của ký tự được tìm kiếm:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
cat
s không cần thiết , đặt tên tệp làm đối số cho wc
và tr
.
stdin
, nhưng điều đó có thể được xử lý chứ không phải cat
ed:tr -d 'A' < <file> | wc ...
Nếu tất cả những gì bạn cần làm là đếm số lượng dòng chứa nhân vật của bạn, điều này sẽ hoạt động:
grep -c 'f' myfile
Tuy nhiên, nó tính nhiều lần xuất hiện của 'f' trên cùng một dòng với một trận đấu.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Thay thế hai lần xuất hiện của "A" bằng ký tự của bạn và "tệp" bằng tệp đầu vào của bạn.
tr -d '\n' < file
: xóa dòng mớised 's/A/A\n/g
: thêm một dòng mới sau mỗi lần xuất hiện của "A"wc -l
: đếm số dòngThí dụ:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9