2012-03-03 142 views
0

你好bash初學者問題。我想通過多個文件看,查找包含搜索詞的線條,算上在此列表中的唯一的行數,然後打印成TEX文件:帶行數的打印搜索詞

  1. 輸入文件名
  2. 搜索詞使用
  3. 的獨特線

計數所以文件「Firstpredictoroutput.txt」使用搜索術語「Stop_gained」的示例輸出線,其中有文件中的10條獨特的線將是:

Firstpredictoroutput.txt Stop_gained 10 

我可以得到獨特的計數使用一個單一的文件:

grep 'Search_term' inputfile.txt | uniq -c | wc -l | >>output.txt 

但我不知道還不夠有關實現在使用bash管道循環。 我所有的輸入文件都以* predictoroutput.txt結尾

任何幫助,非常感謝。

由於提前,

Rubal

回答

0

您可以編寫一個名爲fun功能,並調用fun有兩個參數:filenamepattern

$ fun() { echo "$1 $2 `grep -c $2 $1`"; } 
$ fun input.txt Stop_gained 
input.txt Stop_gained 2 
+0

感謝一個效果很好。將它放在一個循環中以避免必須寫出每個輸入文件和搜索項是非常好的。但現在如果我寫出所有可能的組合列表,它現在可行。 – user964689 2012-03-03 14:53:44

0

您可以使用發現:

find . -type f -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \; 

雖然你可以有奇怪的文件名問題。您可以添加更多的選擇找到,例如只處理「.TXT」文件:

find . -type f -name "*.txt" -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \; 
+0

感謝你這樣做,它產生一個輸出文件,但目前它是空的。我已經檢查過搜索詞存在於文件中。所以不知道爲什麼它不起作用。任何疑難解答提示 – user964689 2012-03-03 14:50:05

+0

抱歉,wc和重定向之間沒有管道。修復。 – Pluc 2012-03-03 14:56:00

+0

現在感謝您的努力,但只輸出wc -l計數,而不是文件名和搜索項。 – user964689 2012-03-03 15:00:37

0
q="search for this" 
for f in *.txt; do echo "$f $q $(grep $q $f | uniq | wc -l)"; done > out.txt 
+0

感謝您爲此製作一個循環! – user964689 2012-03-03 15:49:02

+0

太好了。你可以接受並且贊成那個實際爲你工作的答案。 – Manish 2012-03-03 16:41:13