【发布时间】:2014-11-08 11:27:11
【问题描述】:
我正在尝试从网格中的节点读取 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: cannot open file `4250.000000' for reading(没有这样的文件或目录)”两次(我假设 x 一次,y 一次)。
但是:
nodes_file='../output/ascii/mesh_coords.xyz'
awk '{if (NR==1055) print $0}' ${nodes_file}
打印正确的 x 和 y 坐标。 我需要稍后使用变量 x 和 y,因此需要正确设置它们。
我对 Linux 比较陌生,如果这是一个简单的 awk/shell 语法问题,我深表歉意。
【问题讨论】:
-
使用
$()而不是反引号。 -
貌似
$jalisco包含了前面awk命令的执行结果,是一个数字。然后,您尝试将其用作不存在的文件名。 -
awk '{if (NR==1055) print $0}'可以写得更简洁awk NR==1055 -
在有效的示例中,您查看的是nodes_file,而不是jalisco。
-
你的方法很可能是错误的,因为你是从 shell 一步一步调用 awk,而正确的方法几乎可以肯定是在一个 awk 命令中完成整个工作。