Awk 使用范围表达式筛选表格文件

Awk 使用范围表达式筛选表格文件,awk,sed,Awk,Sed,这是一个示例文件。我想打印第2列中的数字在两个shell变量定义的范围内的行 Test 198 A 0 Test 199 A 2 Test 2 A 0 Test 202 A 22 Test 122859 G 199 Test 198589 A 0 例如,如果$start=198和$end=202,我只需要这些行: Test 198 A 0 Test 1

这是一个示例文件。我想打印第2列中的数字在两个shell变量定义的范围内的行

Test    198     A   0   
Test    199     A   2   
Test    2       A   0
Test    202     A   22  
Test    122859  G   199
Test    198589  A   0   
例如,如果$start=198和$end=202,我只需要这些行:

Test    198 A   0   
Test    199 A   2   
Test    202 A   22  
不是

我尝试了awk和sed的几种组合,但在我的脚本中没有找到一种能正常工作的组合

sed-n-e/\t$start\t/,/\t$end\t/p”文件
这是我的第一次尝试,除了在这种情况下,效果非常好

Test    122859      G   **199**
因此,我尝试了awk,但没有成功,尤其是在处理该案例时:

Test    **198**589  A   0   
awk'$2==“$start”、$2==“$end”'文件
awk“$2~/\t$start\t/,/\t$end\t/”文件

有没有办法纠正其中一个问题,使其满足我的需要


谢谢

看起来您试图在文件中选择范围,但实际上您是在单个字段中选择范围

试一试

start=198
end=202
awk -v start="$start" -v end="$end" '$2>=start && $2<=end' file
start=198
结束=202

awk-v start=“$start”-v end=“$end””$2>=开始和$2使用上述问题中接受答案的
-v
方法。如果不清楚如何将其应用于您的特定问题,请告诉我们。事实上,我不知道有一种特殊的方法可以将shell变量合并到awk中,谢谢!它使第一个awk expresoin工作(如果文件已排序),第二个不返回任何内容。
start=198
end=202
awk -v start="$start" -v end="$end" '$2>=start && $2<=end' file