Bash 如何使用shell脚本解释坐标?

Bash 如何使用shell脚本解释坐标?,bash,shell,Bash,Shell,我们得到了一个名为coords.txt的文件,其中列出了大量坐标。我们希望逐行阅读它们并对它们进行处理,但我们需要先设置x、y和z。 coords.txt: 0, 0, 0 1, 1, 1 232, 434, 434 644, 322, 112 coord_reader='^[0-9], [0-9], [0-9]' while IFS='' read -r line || [[ -n "$line" ]]; do echo $line if [[ $line =~ $coord_rea

我们得到了一个名为coords.txt的文件,其中列出了大量坐标。我们希望逐行阅读它们并对它们进行处理,但我们需要先设置x、y和z。

coords.txt:

0, 0, 0
1, 1, 1
232, 434, 434
644, 322, 112
coord_reader='^[0-9], [0-9], [0-9]'
while IFS='' read -r line || [[ -n "$line" ]]; do
echo $line
    if [[ $line =~ $coord_reader ]]; then

        x=${BASH_REMATCH[1]}
        y=${BASH_REMATCH[2]}
        z=${BASH_REMATCH[3]}
        echo "x is $x, y is $y, z is $z"
else
echo "wrong"
fi

done < "$1"
shell.sh编辑:

0, 0, 0
1, 1, 1
232, 434, 434
644, 322, 112
coord_reader='^[0-9], [0-9], [0-9]'
while IFS='' read -r line || [[ -n "$line" ]]; do
echo $line
    if [[ $line =~ $coord_reader ]]; then

        x=${BASH_REMATCH[1]}
        y=${BASH_REMATCH[2]}
        z=${BASH_REMATCH[3]}
        echo "x is $x, y is $y, z is $z"
else
echo "wrong"
fi

done < "$1"
coord_reader='^[0-9]、[0-9]、[0-9]'
而IFS=''读-r行| |[[-n“$line”];做
回音$线
如果[[$line=~$coord_reader]];然后
x=${BASH_重赛[1]}
y=${BASH_重赛[2]}
z=${BASH_重赛[3]}
echo“x是$x,y是$y,z是$z”
其他的
呼应“错误”
fi
完成<“$1”
我们使用
bashshell.sh coords.txt启动它

看起来协调阅读器中有问题,我只得到了x的结果


我是stackoverflow新手,请随意评论,这样我就可以提高我的提问技巧。

您的正则表达式只匹配一位数,您没有使用捕获组。(顺便说一句,确保
coords.txt
以换行符正确结束,这样您就不需要
| |[[-n$line]]
循环中进行hack操作。)


另一种选择是awk。我们对正则表达式进行模式匹配。我注意到,如果模式匹配,逗号前还有一个空格(不确定这是否是有意的),然后使用逗号分隔的相对定位字符串打印出x=,y=,z=字符串。

Thx用于
||[-n$line]]
信息顺便说一句:)我会检查出来!好吧,如果我在文件中得到的坐标少一些,它就可以工作,但对于5000多个条目,它就不工作了:/如何解决这个问题?关于这段代码,没有任何内容表明它可以处理的行数有上限。性能会很慢,但仍能正常工作。八进制输出末尾的
000015
表示当前行以回车结束;在某个时候,您的文件开始使用DOS行尾,这需要删除。(我怀疑您的文件是通过将几个单独的文件连接成一个文件创建的?)简短回答:您的代码很好;您的输入文件不是正确的POSIX文本文件,
bash