2017-02-23 3 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

당신은 (어느 경로를 당신이 필요로하는, 어디에서)

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

간단히, 내가 먼저 모든 파일을 보내고 cat을 해요, 당신을 적용

> 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}' 

및 실행을 "속임수"수 나머지는 명령을 내린다. 파이프가 하나의 파일처럼 행동하는 것이다.

+0

그러나 나는 폴더 밖에서 그것을 달성해야합니다. 예를 들어 나는 지금 내 홈 폴더에 있으며 모든 데이터가 들어있는 폴더는 data_folder에 있고 또한 내 스크립트는 홈 폴더에 있으며 data_folder와 같은 수준입니다. 또한 내 스크립트는 매개 변수로 폴더 이름을 가져야합니다. 그래서 ./averagereviews.sh folder_name을 쓰면 해당 폴더의 각 데이터 파일에 대한 의미를 찾아야합니다. –

+0

그러면 "데이터 파일"인 파일을 찾는 방법이 있다고 가정합니다. "그들의 이름은 data _ ###. txt"와 같은 것입니다. 귀하의 의견을 고려하여 답변을 업데이트했습니다. – fzd

+0

사실 나는 당신이 어떻게 데이터 파일을 cat 할 수 있는지 이해할 수 없었다. 그것의 디렉토리 그래서 당신이 디렉토리에 고양이 수없는 오류를 제공합니다. 어쩌면 내 실수는 내가 제대로 설명하지 못했을 것입니다. 이제 work라는 파일에 있는데 스크립트와 "data_files"라는 폴더가 있습니다. 스크립트를 실행하면 모든 데이터 파일 (예 : dataFile1.dat)을 가져와야하며 데이터 파일 내부의 정보를 사용하면 모든 데이터 파일에 평균이 적용됩니다. 평균은 각 데이터에 대한 것입니다. –

관련 문제