2009-10-21 79 views
111

在linux/terminal下有什麼方法可以計數,char f在純文本文件中出現了多少次?在純文本文件中計數字符的出現次數

+4

屬於超級用戶 – Malfist 2009-10-21 21:00:11

+8

從技術上講,這可以被認爲是一個sh/bash /等。編程問題,所以我認爲它在任何地方都有效。 – 2009-10-21 21:51:11

+0

@Rob Hruska:是的,我也認爲是bash編程... @abrashka:第一個和第二個問題的答案是「否」! – cupakob 2009-10-22 07:33:33

回答

159

這個怎麼樣s:

fgrep -o f <file> | wc -l 

注:除了更容易記憶/複製和定製,這是約三倍(對不起,編輯!第一次測試拙劣)比Vereb的答案更快。

+0

如果你需要計算'\ r'或'\ n'字符,這一個不起作用; 'tr -cd f'答案確實適用於此。 – bjnord 2013-10-05 00:08:55

+1

要計算幾個字符,例如'a','b'和'c',使用'egrep':'egrep -o'a | b | c' | wc -l'。 – 2017-04-03 13:29:51

+0

另外,要小心不要在'tr'回答中使用'wc -c':因爲'grep'是一行一行的輸出,'wc'會將行結束計爲字符(因此字符數加倍)。 – 2017-04-03 13:34:31

8
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc 

,其中A是字符

時間該命令與4.9 MB和110萬個OCCURENCES搜索字符的文件:

real 0m0.168s 
user 0m0.059s 
sys 0m0.115s 
+1

如果你取出不需要的'cat',將文件名作爲'wc'和'tr'的參數,這會快三分之一。 – Cascabel 2009-10-21 21:49:00

+0

不幸的是,tr只適用於標準輸入 – Vereb 2009-10-21 21:52:26

+1

如果你真的想優化它,只讀一次:echo $(stat -c%s ) - $(cat | tr -d'A'| wc -c) | bc – Vereb 2009-10-21 22:01:15

3

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

更換兩個您的角色出現「A」,輸入文件出現「文件」。

  • tr -d '\n' < file:去除新行
  • sed 's/A/A\n/g:增加了一個新行的每次出現後的 「A」
  • wc -l:計數的行數

實施例:

$ cat file 
abcdefgabcdefgababababbbba 


1234gabca 

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l 
9 
6

如果你需要做的就是計算包含你的性格線的數量,這將工作:

grep -c 'f' myfile 

然而,它計算在同一行作爲一個單一的比賽「F」的多次出現。

56

更快:

tr -cd f < file | wc -c 

時間此命令與4.9 MB的文件,搜索字符110萬個OCCURENCES:

real 0m0.089s 
user 0m0.057s 
sys 0m0.027s 

時間爲Vereb答案與echocattrbc對於同一個文件:

real 0m0.168s 
user 0m0.059s 
sys 0m0.115s 

時間羅布Hruska的答案與trsedwc同一個文件:

real 0m0.465s 
user 0m0.411s 
sys 0m0.080s 

時間爲Jefromi答案與fgrepwc同一個文件:

real 0m0.522s 
user 0m0.477s 
sys 0m0.023s 
+2

要計算幾個字符,例如'a','b'和'c':'tr -cd abc 2017-04-03 13:26:28

+0

你爲我找到了'tr'的正確語法! – Pysis 2017-08-25 15:29:10

相關問題