我们使用一个脚本将 bash 命令打印到文件中,然后在 HPC 系统上运行。它应该运行一个包含由空格分隔的地理坐标的大型文本文件,并从该文件中提取特定区域(例如,提取 x 坐标介于 xmin 和 xmax 之间且 y 坐标介于 ymin 和 ymax 之间的所有行)。
理想情况下,我希望像这样使用 awk 来实现这一点(因为我现在没有电脑,所以只能凭记忆来):
awk -v xmin=-13000 -v xmax=13000 -v ymin=-500 -v ymax=500 -F ' ' {if ($1 > xmin && $1 < xmin && $2 > ymin && $2 < ymin) print $1 $2} $infile > $outfile
这可能执行得很好。但是,正如标题所示,我们间接为 25 个区域保存了此行,每个区域都有自己的 xmin、xmax 等。之后还有更多操作(使用 GMT 调用等)。这里有一个小片段:
xmin=-13000
xmax=13000
ymin=-500
ymax=500
infile=./full_file.txt
outfile=./filtered_file.yxy
srcfile=./region_1.txt
echo """awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -F ' ' {if ($1 > $xmin && $1 < $xmin && $2 > $ymin && $2 < $ymin) print $1 $2} $infile > $outfile""" >> $srcfile
显然,由于变量扩展,这会在运行时引发错误。我尝试过转义 awk 列标识符,但无济于事,或者没有正确理解模式。有人能告诉我一个允许我们保留间接方法的解决方案吗?