awk: break 옵션이 있는 for 루프

awk: break 옵션이 있는 for 루프

데이터를 조작하는 데 사용하려고 합니다 awk. 두 개의 열이 있는 데이터 파일이 있고 특정 값이 포함된 행을 찾고 싶습니다. 하지만 이 값을 포함하는 행이 두 개 이상 있으므로 첫 번째 행만 찾고 싶습니다. -loop를 사용 for하여 시도했지만 break예상한 대로 작동하지 않았습니다.

{for (i=0;$2==100.0;min=$1){
        i++
        max=min+500
        if(i==1){
            print i"\t"min"\t"max
            break
            }
        }
}

min이 루프 뒤에는 및 를 사용하는 일부 코드가 있습니다 max.

편집하다:데이터는 다음과 같습니다

59.45   96
59.50   96
59.60   97
59.75   98
59.90   98
59.95   98
60.00   99
60.05   99
60.20   99
60.25   100
60.40   100
60.45   100
60.50   101
60.55   101
60.60   101
60.65   101
60.70   102
60.90   102
60.95   103
61.00   103
61.05   103
61.15   103
61.20   104
61.35   104
61.40   104
61.45   105
61.50   105
61.60   105
61.65   106
61.70   100
61.85   100

두 번째 열에 포함된 첫 번째 행을 찾아 100첫 번째 열의 값을 변수에 저장하고 싶습니다.

답변1

이와 같은 for 루프를 사용할 수 없습니다. 다음과 같이 시도해 보세요:

awk '$2==100{print 1,$1,$1+500; exit}' OFS='\t' file

답변2

이제 제대로 작동하는 솔루션이 생겼습니다.

BEGIN {
    SearchMinFlag = 0;
    TempLimit = 195.0
    DeltaTime = 550
    TempMin = "LEER"
    FS = "\t"
}

# Stop MinSearch
NR > 2 && $1 > tstop {SearchMinFlag = 0}

# MinSearch
SearchMinFlag == 1 {
    ywert = $2;
    if (ywert < TempMin) {
        TempMin = ywert;
        TimeMin = $1
        }
}

# Start MinSearch
NR > 2 && $2 > TempLimit && SearchMinFlag == 0 && TempMin == "LEER" {
        SearchMinFlag = 1;
        tstart = $1
        tstop = tstart + DeltaTime
        ymerk = $2;
        TempMin = 10000
    }

# Result
END {
    print "t(T_min)", "T_min", "t_start", "t_stop\n"TimeMin, TempMin, tstart, tstop
 }

관련 정보