2017-02-07 60 views
1

我想檢查一個目錄的所有文件中具有相同擴展名的所有文件(例如,「遞歸」)的出現次數,例如, *。C。我正在Unix中使用SO Solaris。計算幾個文件中發生的次數

我嘗試了一些解決方案,在其他職位給出的,而唯一可行的就是這一個,因爲在此係統中,我不能用命令grep -o

sed 's/[^x]//g' filename | tr -d '012' | wc -c 

其中x是我想要的發生數。這一個工程,但它不是遞歸的,有什麼辦法讓它遞歸?

+0

你可以通過用'*'(對於當前目錄)或'/ dir/*'替換'filename'作爲另一個目錄甚至是'/dir1/*.txt/dir2/*'來遞歸。 txt'掃描兩個目錄。如果您想搜索所有目錄的recursivelly,那麼使用'find'是正確的方法。 –

+0

謝謝喬治,你是完全正確的,我想要後者的選擇,所以我用Grisha建議我做的工作找到了,謝謝! – Vpdj

回答

1

您可以從find獲得遞歸列表並使用-exec參數執行命令。

我建議這樣的:

find . -name '*.c' -exec cat {} \; | tr -c -d ']' | wc -c 

-c參數tr意味着使用提供的字符串相反 - 即,在這種情況下,匹配所有]

find命令中的.表示在當前目錄中進行搜索,但您也可以在其中提供任何其他目錄名稱。

+0

此解決方案完全可行,非常感謝! – Vpdj

0

我希望你已經安裝了nawk。那麼你可以:

nawk '{a+=gsub(/\]/,"x")}END{print a}' /path/* 
+0

nawk不能很好地與我的操作系統工作,但無論如何謝謝你的答覆! – Vpdj

0

你可以自己寫一個代碼片段代碼。我建議你運行以下命令:

awk '{for (i=1;i<=NF;i++) if ($i=="[") n++} END{print n}' *.c 

這將在所有文件中搜索「[」在當前目錄和打印出現的次數。

+0

我試過這個解決方案,但它似乎打印出現這種情況的文件數量,並且我想知道該字符在所有文件中出現了多少次。 – Vpdj

+0

你確定嗎?因爲我使用相同的代碼,並且它向我展示了...... 10,即使目錄僅包含5個文件。 –

+0

是的,我使用的代碼有一個文件,有6次出現的字符']',它顯示了我1.然後我創建了另一個具有相同出現次數的文件並顯示了2,所以我的結論是它只計算文件其中角色至少出現一次,但我不知道爲什麼我們有不同的解決方案,也許我做錯了什麼,謝謝你的回覆! – Vpdj