我正在尝试从网格中的节点读取x和y坐标。 所有节点的坐标都在文件mesh_coords.xyz中。 我想要一个提到1055行,这是指一个名为哈利斯科州的地方。
nodes_file='../output/ascii/mesh_coords.xyz' jalisco=`awk '{if (NR==1055) print $0}' ${nodes_file}` x=`awk '{print $1}' ${jalisco}` y=`awk '{print $2}' ${jalisco}`
返回:“awk:cmd。line:1:fatal:无法打开文件`4250.000000'用于读取(无此文件或目录)”两次(我假设一次为x,一次为y)。
然而:
nodes_file='../output/ascii/mesh_coords.xyz' awk '{if (NR==1055) print $0}' ${nodes_file}
打印正确的x和y坐标。 我需要稍后使用variablesx和y,以便它们需要正确设置。
如果这是一个简单的awk / shell语法问题,我对Linux相对比较陌生,所以很抱歉。
我相信$jalisco
变量是由一个字符串中的空格分隔的xy坐标。 显然$jalisco
不是一个文件,因此你最后2个awk命令给出了错误。
你可以使用这个:
x=$(awk '{print $1}' <<< "${jalisco}") y=$(awk '{print $2}' <<< "${jalisco}")
或者更好的是,使用流程替换从第一个awk本身获取两个值:
read xy < <(awk 'NR==1055' "$nodes_file")
另外请注意,您的awk
命令可以缩短为:
awk 'NR==1055' "$nodes_file"
默认的行为是打印行,所以当条件NR==1055
为真时,awk会执行这个操作。