Awk 在最大值之后,计算特定范围内的行数
我有一个带有温度值(加热和冷却)的文本文件,我需要特定温度范围(例如600-500°C)内的行数,但只有在达到最高温度(冷却)后才需要 我有一个awk脚本,可以计算特定范围内的行数,但我不知道在达到最高温度后如何开始计算Awk 在最大值之后,计算特定范围内的行数,awk,grep,Awk,Grep,我有一个带有温度值(加热和冷却)的文本文件,我需要特定温度范围(例如600-500°C)内的行数,但只有在达到最高温度(冷却)后才需要 我有一个awk脚本,可以计算特定范围内的行数,但我不知道在达到最高温度后如何开始计算 awk '$3<600 && $3>500 { count++ } END { print count/100 }' Tp700_5s_3TC.d02 awk'$3500{count++}END{print count/100}Tp700_5s_3
awk '$3<600 && $3>500 { count++ } END { print count/100 }' Tp700_5s_3TC.d02
awk'$3500{count++}END{print count/100}Tp700_5s_3TC.d02
有人能帮我吗?我将在
awk
中为此提供解决方案
首先,您需要获得$3
中最大值的行号,我使用awk
逻辑查找它并将其存储在bash
变量中。我在命令行上运行此命令。不使用$
标志运行相同的程序
$ startLine=$(awk 'BEGIN {max = 0} {if ($3>max){ max=$3;lineNum=NR}} END {print lineNum}' file)
$ printf "%s\n" "$startLine"
477
此处的最大值位于477行中,其值为702.19
。因此,根据我的理解,您希望看到从这一点开始,500-600
之间的波动。为此在awk
中添加另一个逻辑
$ awk -v startLine="$startLine" 'NR>startLine{if ($3<600 && $3>500){count++}}END { print count/100 }' file
0
我将在awk
中为此提供解决方案
首先,您需要获得$3
中最大值的行号,我使用awk
逻辑查找它并将其存储在bash
变量中。我在命令行上运行此命令。不使用$
标志运行相同的程序
$ startLine=$(awk 'BEGIN {max = 0} {if ($3>max){ max=$3;lineNum=NR}} END {print lineNum}' file)
$ printf "%s\n" "$startLine"
477
此处的最大值位于477行中,其值为702.19
。因此,根据我的理解,您希望看到从这一点开始,500-600
之间的波动。为此在awk
中添加另一个逻辑
$ awk -v startLine="$startLine" 'NR>startLine{if ($3<600 && $3>500){count++}}END { print count/100 }' file
0
由于您尚未提供一个未经测试的温度,但通常的做法是,每次发现温度高于先前的最高温度时,只需重置计数:
awk '
NR==1 { next }
($3 > 500) && ($3 < 600) { cnt++ }
(NR == 2) || ($3 > max) { max=$3; cnt=0 }
END { print cnt }
' file
awk'
NR==1{next}
($3>500)&($3<600){cnt++}
(NR==2)| |($3>max){max=$3;cnt=0}
结束{print cnt}
"档案"
由于您尚未提供温度,因此这是未经测试的,但通常的做法是,每次发现温度高于先前的最高温度时,只需重置计数:
awk '
NR==1 { next }
($3 > 500) && ($3 < 600) { cnt++ }
(NR == 2) || ($3 > max) { max=$3; cnt=0 }
END { print cnt }
' file
awk'
NR==1{next}
($3>500)&($3<600){cnt++}
(NR==2)| |($3>max){max=$3;cnt=0}
结束{print cnt}
"档案"
达到最大值后的条件是什么。
我指的是柱的最大值(温度),在这种情况下约为700°C。请参阅下面的答案。让我知道,如果这是你正在寻找的。我们真的需要考虑100行输入来理解你的要求吗?您的问题显示了一个(注:“最小值”),其中包括简洁、可测试的样本输入和预期输出。达到最大值后,的条件是什么。
?我指的是列的最大值(温度),在这种情况下约为700°C。请参阅下面的答案。让我知道,如果这是你正在寻找的。我们真的需要考虑100行输入来理解你的要求吗?您的问题将显示一个(注:“最小值”),其中包括简洁、可测试的样本输入和预期输出。在进行最小值/最大值计算时,切勿在最小值/最大值变量中添加您希望小于/大于输入值的任意值(例如0
),只需读取第一个值作为种子。有没有办法告诉awk忽略文件头?现在我必须手动删除第一个to行才能使代码正常工作。@cps:您只需要在计算最大数时使用它,即在firstawk
中。请参阅我的更新在执行最小/最大值计算时,切勿使用希望小于/大于输入值的任意值(例如,0
)对最小/最大值变量进行种子设定,而是使用读取的第一个值进行种子设定。是否有方法告诉awk忽略文件头?现在我必须手动删除第一个to行才能使代码正常工作。@cps:您只需要在计算最大数时使用它,即在firstawk
中。参考我的更新