Awk 使用范围表达式筛选表格文件
这是一个示例文件。我想打印第2列中的数字在两个shell变量定义的范围内的行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
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