awk:致命:无法打开文件`'阅读(没有这样的文件或目录)

时间:2014-11-08 11:27:12

标签: linux bash shell awk

我正在尝试从网格中的节点读取x和y坐标。所有节点的坐标都在文件mesh_coords.xyz中。我希望那个引用第1055行,它指的是一个叫做Jalisco的地方。

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:致命:无法打开文件`4250.000000'进行读取(没有这样的文件或目录)”两次(我假设一次为x,一次为y)。

然而:

nodes_file='../output/ascii/mesh_coords.xyz'

awk '{if (NR==1055) print $0}' ${nodes_file}

打印正确的x和y坐标。 我需要稍后使用变量x和y,因此需要正确设置它们。

我对Linux比较陌生,所以如果这是一个简单的awk / shell语法问题,请道歉。

1 个答案:

答案 0 :(得分:6)

我相信$jalisco变量持有x-y坐标,用字符串中的空格分隔。显然$jalisco不是文件,因此你的最后2个awk命令会出错。

您可以使用:

x=$(awk '{print $1}' <<< "${jalisco}")
y=$(awk '{print $2}' <<< "${jalisco}")

或者更好的是,使用流程替换从您的第一个awk中获取这两个值:

read x y < <(awk 'NR==1055' "$nodes_file")

另请注意,您的awk命令可以缩短为:

awk 'NR==1055' "$nodes_file"

默认操作是打印该行,这是当条件NR==1055为真时awk将执行的操作。