繁体   English   中英

awk/sed 在两个模式之间插入行

[英]awk/sed insert line between two patterns

我有一个数控机床的 G 代码文件,需要在图案之间插入两行。 基本上我需要编写一个简单的后处理器。 这是我的 CAM 程序中的一小段代码:

G00 X-1.663 Y-0.992 Z+0.
G01 X-1.072 Y-0.992
G01 X-1.072 Y-0.874
G01 X-1.663 Y-0.874
G01 X-1.663 Y-0.992
G00 X-3.021 Y-0.992
G01 X-3.021 Y-0.874
G01 X-2.43 Y-0.874
G01 X-2.43 Y-0.992
G01 X-3.021 Y-0.992

我需要按顺序在 G00 和 G01 之间插入两行。 所以上面的例子现在将变成:

G00 X-1.663 Y-0.992 Z+0.
M51
M04 F.1
G01 X-1.072 Y-0.992
G01 X-1.072 Y-0.874
G01 X-1.663 Y-0.874
G01 X-1.663 Y-0.992
G00 X-3.021 Y-0.992
M51
M04 F.1
G01 X-3.021 Y-0.874
G01 X-2.43 Y-0.874
G01 X-2.43 Y-0.992
G01 X-3.021 Y-0.992

我需要的另一件事是换行符必须是 Windows/DOS 样式,末尾带有 \\r\\n。 这与需要 DOS 文本文件的旧的、善变的 CNC 控制器有关。 我可以使用另一个 awk 或 sed 脚本,但最好使用单行脚本。 我在尝试:

awk '/G00/,/G01/{print $0 RS "M51" RS "M04 F.1";next}1' FILE

但是这些行是在任何 G00 或 G01 之后添加的。 我只需要 G00 和 G01 之间。 还有一件事,我更喜欢单行命令。 谢谢!

使用 awk,您可以执行以下操作:

awk '$1=="G00"{p=1} p && $1=="G01"{print "M51"; print "M04 F.1"; p=0} 1' file
G00 X-1.663 Y-0.992 Z+0.
M51
M04 F.1
G01 X-1.072 Y-0.992
G01 X-1.072 Y-0.874
G01 X-1.663 Y-0.874
G01 X-1.663 Y-0.992
G00 X-3.021 Y-0.992
M51
M04 F.1
G01 X-3.021 Y-0.874
G01 X-2.43 Y-0.874
G01 X-2.43 Y-0.992
G01 X-3.021 Y-0.992

你可以使用这样的东西:

awk 'last=="G00" && $1=="G01" {print "M51\nM04 F.1"} {last=$1} 1' file

如果前一行的第一个字段是“G00”,当前行的第一个字段是“G01”,则打印这两行。

输出:

G00 X-1.663 Y-0.992 Z+0.
M51
M04 F.1
G01 X-1.072 Y-0.992
G01 X-1.072 Y-0.874
G01 X-1.663 Y-0.874
G01 X-1.663 Y-0.992
G00 X-3.021 Y-0.992
M51
M04 F.1
G01 X-3.021 Y-0.874
G01 X-2.43 Y-0.874
G01 X-2.43 Y-0.992

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM