我正在尝试使用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
}