Linux 从文件中读取行范围,并在另一个文件中查找该范围内的最大值

Linux 从文件中读取行范围,并在另一个文件中查找该范围内的最大值,linux,bash,awk,Linux,Bash,Awk,我希望从一个文件中的行号范围中提取最大值,该范围从另一个文件中读取 定义三个文件: 位置_文件:包含定义行号范围的两列整数,因此col1[i]=0) 提取的\u数据\u文件:为位置\u文件中的每一行包含完整\u数据\u文件中的最大值,其中完整\u数据\u文件中的行号在位置\u文件中定义的范围内 cat position_file 1 3 5 7 cat full_data_file 1 4.3 5.2 2.0 0.1 0 4 9 cat extracted_data_file 5.2 4

我希望从一个文件中的行号范围中提取最大值,该范围从另一个文件中读取

定义三个文件:

位置_文件:包含定义行号范围的两列整数,因此col1[i] 完整数据文件:包含一列数值数据(>=0)

提取的\u数据\u文件:为位置\u文件中的每一行包含完整\u数据\u文件中的最大值,其中完整\u数据\u文件中的行号在位置\u文件中定义的范围内

cat position_file
1 3
5 7

cat full_data_file
1
4.3
5.2
2.0
0.1
0
4
9

cat extracted_data_file
5.2
4
我目前的做法是

while read pos1 pos2; do
    awk -v p1="$pos1" -v p2="$pos2" 'BEGIN {max=0} NR>=p1 && NR<=p2 && $1>max {max=$1} END {print max}' < full_data_file >> extracted_data_file
done < position_file
读取pos1 pos2时
;做
awk-v p1=“$pos1”-v p2=“$pos2””开始{max=0}NR>=p1&&NRmax{max=$1}结束{print max}'>提取的数据_文件
完成
这不是一个好方法,因为我反复将完整的数据文件加载到内存中,速度非常慢。我正在寻找一种方法,一步到位。我在awk中使用数组方面不是很熟练,但我认为解决方案可能(但不一定)在awk中使用数组


非常感谢你的帮助

您可以使用此
awk

awk 'FNR==NR{a[FNR]=$1; next} {max=a[$1]; for (i=$1+1; i<=$2; i++) 
if (a[i]>max) max=a[i]; print max}' full_data_file position_file > extracted_data_file

请张贴示例输入文件和示例预期文件,以便于我们在代码标签中使用。
cat extracted_data_file
5.2
4