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

我有一个带有温度值(加热和冷却)的文本文件,我需要特定温度范围(例如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_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:您只需要在计算最大数时使用它,即在first
awk
中。请参阅我的更新在执行最小/最大值计算时,切勿使用希望小于/大于输入值的任意值(例如,
0
)对最小/最大值变量进行种子设定,而是使用读取的第一个值进行种子设定。是否有方法告诉awk忽略文件头?现在我必须手动删除第一个to行才能使代码正常工作。@cps:您只需要在计算最大数时使用它,即在first
awk
中。参考我的更新