【问题标题】:Read line range from a file and find largest value within the range in another file从文件中读取行范围并在另一个文件中找到该范围内的最大值
【发布时间】:2018-02-26 20:03:39
【问题描述】:

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

定义三个文件:

position_file:包含两列整数,定义了行号范围,所以 col1[i]

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

extracted_data_file:对于 position_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 中使用数组。

非常感谢您的帮助。

【问题讨论】:

  • 请发布示例输入文件和示例预期文件,以方便我们使用代码标签。

标签: linux bash awk


【解决方案1】:

你可以使用这个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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多