2017-02-23 97 views
0

我正在寫一個scipt,它將接受它將完成這項工作的文件夾的參數。目的是計算平均評論數量並在文件名稱旁邊打印結果。我只寫了一個文件的腳本,它的工作原理沒問題,但我找不到任何解決方案在多個文件上執行它。我應該得到一個像這樣的輸出;Linux Bash腳本,用於計算多個文件的平均值

% ./averagereviews.sh path_to_folder 
    hotel_11212 3.51 
    hotel_2121 2.62 
    hotel_31212 2.43 

...

我完成這個任務只有一個酒店和代碼是這樣的;

grep "<Overall>" $1 | sed 's/<Overall>//g'| awk '{SUM += $1} END {print SUM/NR}' 

這只是搜索詞「」的文件中,並得到其旁邊的數字,然後將這些數字和劃分與NR的總和找到平均值。

當我運行它的輸出是給定的酒店

./averagereviews.sh hotel_190158.dat 
    4.00578 

平均值,但我應該印刷酒店的名字這樣對多個.dat文件的文件夾。我怎樣才能做到這一點 ?

回答

1

你可以 「欺騙」

> cat averagereviews.sh 
#!/bin/bash 
SUM=0 
data_files=$(ls $1/dataFile*.dat) 
cat $data_files | grep "<Overall>" | sed -e 's/<Overall>//g' | awk '{SUM += $1} END {print SUM/NR}' 

和運行(在任何地方,無論與路徑需要)

> ~/tools/averagereviews.sh /tmp/data/ 

簡單地說,我是第一次cat荷蘭國際集團的所有文件,並應用命令到其餘的 - 讓它像管道一樣是一個文件。

+0

但我應該在文件夾之外實現它。例如,我現在位於我的home文件夾中,包含所有數據的文件夾位於data_folder中,而且我的腳本位於home文件夾中,與data_folder的級別相同。另外我的腳本應該將文件夾名稱作爲參數。因此,當我寫入./averagereviews.sh文件夾名稱時,應該爲該文件夾中的每個數據文件找到含義。 –

+0

然後我想你有一個找到「數據文件」文件的方法。像「他們的名字是數據_ ###。txt」。我更新了我的答案,將您的意見納入考慮範圍。 – fzd

+0

其實我不明白你怎麼可以cat data_files。它是一個目錄,所以它會給你錯誤提供一個目錄。也許是我的錯誤,我無法正確解釋。現在我在一個名爲work的文件中,我有我的腳本和一個名爲「data_files」的文件夾。當我運行我的腳本時,它應該獲取所有數據文件(例如dataFile1.dat),並使用數據文件中的信息取所有數據文件的平均值。平均值爲每個數據。 –