![根据另一个文件中的范围提取行](https://linux22.com/image/94439/%E6%A0%B9%E6%8D%AE%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E8%8C%83%E5%9B%B4%E6%8F%90%E5%8F%96%E8%A1%8C.png)
price.txt
文件有两列:(名称和值)
Mary 134
Lucy 56
Jack 88
Marissa 37
Emily 85
Antony 99
range.txt
文件也有两列:(水果和价值)
apple 57
banana 62
orange 88
blueberry 98
的第二列range.txt
是已排序(从最小到最大)
我的目标是提取price.txt
其值在文件中的值范围 (57 - 98) 内的行range.txt
。
预期结果如下:
Jack 88
Emily 85
我尝试使用以下代码来解决此问题,但我不知道如何选择特定列的第一行和最后一行。代码中不清楚的部分位于星号 ( **...**
) 之间:
awk 'FNR == NR {value=$2; **low=??; high=??**; next}
{if ($2>=**low** && $2<=**high** ) print $0}' range.txt price.txt
答案1
awk 'FNR == NR {high=$2; if(NR==1) low=high; next}
{if ($2>=low && $2<=high ) print $0}' range.txt price.txt
当 时FNR == NR
,它将读取文件,这里我们将文件range.txt
的第二列分配给,并使用将第一个值分配给,然后我们可以在下一句中使用这些值。并且会打印出满足条件的行。range.txt
high
if(NR==1) low=high
high
low
if
print $0