linux - awk:致命:无法打开文件 `' 进行读取(没有这样的文件或目录)

标签 linux bash shell awk

我正在尝试从网格中的节点读取 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 (No such file or directory)”两次(我假设 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 变量在字符串中保存由空格分隔的 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 将执行此操作。

关于linux - awk:致命:无法打开文件 `' 进行读取(没有这样的文件或目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816605/

相关文章:

linux - 如何在 Ubuntu 中检查 .tar(不是 tar.gz)文件是否损坏?

linux - 这个 bash 脚本命令(sed - e)是什么意思?

bash - 如何使用 jq 复制 JSON 数组中的现有对象?

linux - .bashrc 别名帮助命令

shell - jq:错误:test1/0 未在 <top-level>,第 1 行定义

linux - 使用shell脚本调用目录下一些不规则命名的文件

Mysql 安装失败,出现 dpkg : error processing package mysql-server-5. 6 (--configure)

linux - 变量作为 bash 数组索引?

Linux - 数字排序然后覆盖文件

linux - 存储在变量中的 ssh 输出以测试其值