繁体   English   中英

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

[英]Read line range from a file and find largest value within the range in another file

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

定义三个文件:

position_file:包含两列整数,定义了一系列行号,所以 col1[i] < col2[i]

full_data_file:包含单列数值数据 (>=0)

extract_data_file:包含位置文件中每一行的full_data_file中最大值,其中full_data_file中的行号在position_file中定义的范围内

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

这不是一个好方法,因为我反复将 full_data_file 加载到内存中,这很慢。 我正在寻找一种方法,只需一步即可完成此操作。 我在 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM