[英]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.