2014-06-08 6 views
0

리눅스 초보자 및 첫 번째 게시물. 나의 명확성의 결여를 용서하십시오.최소값 차이 값 방법

필자는 파일로 awking하는 파일과 와일드 카드를 사용하여 awking하는 두 가지 방법 사이의 불일치로 인한 간단한 최소 값 문제라고 생각합니다.

저는 현재 두 번째 열의 전반적인 최소값을 찾고 싶은 곳에 약 20,000 개의 파일이 있습니다. 모든 파일은 동일한 접두어를 가지며 스크립트를 실행하는 디렉토리의 한 수준 아래에 있으므로 작업을 빠르게 수행하기 위해 와일드 카드를 사용하고있었습니다.

예 :

awk 'min=="" || $2 < min {min=$2} END{print min}' */myfile.10* 

그것은 실행하기 위해 약 14 초 정도 걸리지 만이 진정한 최소 발견되지 않습니다.

또한, 나는 각 디렉토리의 각 파일을 통해 강화 나는 올바른 최소 찾을 수가 :

min=1000000000.0 
    for dir in `ls -d *run*/`; do 
    minlocal=1000000000.0 
    for file in `ls -1 ${dir}myfile.*`; do 
     for val in `awk 'NR==1 {print $2}' $genfile`; do 
     compare_result=`echo $minlocal" > "$val | bc` 
     if [ $compare_result -eq 1 ]; then 
      minlocal=$val 
      fileminlocal=$file 
      compare_result=`echo $min" > "$minlocal | bc` 
      if [ $compare_result -eq 1 ]; then 
      min=$val 
      filemin=$file 
      fi 
     fi 
     done 
    done 
    compare=`echo $min" > "$minlocal | bc` 
    if [ $compare -eq 1 ]; then 
     echo " Error finding lowest chi^2 in " $fileminlocal 
     echo " Skipping..." 
    else 
     echo " Lowest value (" $minlocal ")found in " $fileminlocal 
    fi 
    done 

이 방법은 제대로 전체 최소 찾았지만 그렇게 4 분 정도 걸립니다. 나는이 파일들 각각을 통해 루핑하는 것이 더 많은 시간이 걸릴 것이라고 생각하지만, 왜 작업은 와일드 카드를 사용하여 실패 할까?

+0

일부 파일에서 테스트를했는데, awk가 작동합니다. 나를 위해 그것은 올바른 가치를 제공합니다. '진정한 최소'란 무엇을 의미합니까? 이것을 다시 쓸 수 있습니다 :'awk '! min || $ 2 Jotne

+0

응답하지 않을 때 우리는 어떻게 도울 수 있습니까? – Jotne

+0

답장을 보내 주셔서 감사합니다 (이미 자러갔습니다). – user3719139

답변

0

귀하의 awk 스크립트는 아마도 min 값에 대한 숫자 비교 대신 문자열을 사용하고 있습니다. 특히 스크립트의 첫 번째 명령문이 명시 적으로 문자열 비교이기 때문에 가능합니다. 숫자 강제로 그것을 변경 : 당신이 사용하는 방법

awk 'min=="" || $2 < min+0 {min=$2} END{print min}' */myfile.10* 

awk는 입력 숫자 문자열로 모든 입력을 처리, 그것의 해당 입력 실제로 숫자 나 문자열 인 경우 AWK 알아낼 수있는 처음.

+0

또는'min + 0' 대신'+ min' 만 입력하십시오. –

+0

'x

+0

awk 'min == ""|| $ 2 user3719139

0

나는 당신이 당신이 언급 불일치를 얻고있는 이유는 확실하지 않다 그러나 나는이 문제를 해결하기 위해 sort를 사용하는 것이 좋습니다 것입니다 :

sort -n -k2 */myfile.10* 

키와 두 번째 열을 사용하여 숫자 정렬을 수행합니다.

sort -n -k2 */myfile.10* | awk 'NR==1 {print $2; exit}' 

다음 첫 번째 라인과 출구의 두 번째 열에서 값을 출력합니다 : 모든 파일의 모든 라인 sort 의지의 출력은, 어쩌면 당신은 당신이 관심있는 값을 출력 만에 AWK를 사용할 수 있습니다 .

+0

이것은 작동하지만 최소한의 값을 얻는 것보다 _whole_ 목록을 정렬해야하므로 전체 작업을 수행하는 데 awk를 사용하는 것보다 훨씬 효율적이지 않다고 생각됩니다. 나는 그것이 유효한 해결책이기 때문에 여기에 남겨 두겠다. 그러나 나는 많은 양의 데이터를 사용하는 것에 반대한다. –