Jim*_*Jim 2 awk text-processing
我使用的是 ArchLinux 4.1.6-1 和 bash 4.3。
我需要在 200 多个工业机器人中整理一堆程序,因此尝试使腿部工作自动化。
我可以剥夺一个文件下来到只是一个列表的坐标在同一顺序的参考与混合的原始文件bash,sed,head,tail等等,是这样的:
via15
via25
via35
via3
via4
via5
p0584_62284
via43
Run Code Online (Sandbox Code Playgroud)
我需要更改包含via从 1 开始的递增系列数字的行上的尾随数字:
via1
via2
via3
via4
via5
via6
p0584_62284
via7
Run Code Online (Sandbox Code Playgroud)
我是一名机器人程序员,我只能管理简单的sed正则表达式,但是有了awk,我就像骑自行车的鱼。
$ awk '/via/{$0="via" ++n};1' file
via1
via2
via3
via4
via5
via6
p0584_62284
via7
Run Code Online (Sandbox Code Playgroud)
/via/{$0="via" ++n}
如果该行包含via,则将其替换为“via”,后跟n。领先的++原因,n每一个这样做的时间之前递增。 $0是 awk 将这条线作为一个整体来引用的方式。
1
这是 awk 用于打印该行的神秘简写。
详细地说,1是一个条件,它的计算结果为真。由于未指定任何操作,因此执行默认操作,即打印以下行:print $0。因此,单独1是打印行的简写。
难道这三个字母via可以对线出现,我们并没有想改变吗?如果是这样,我们应该更有选择性地更改哪些行。如果我们只想更改以via和开头的行,并且via后面只跟数字,那么,正如 NeronLeVelu 在评论中所建议的那样,我们应该使用更严格的正则表达式,例如^via[0-9]+$. 在这种情况下:
awk '/^via[0-9]+$/{$0="via" ++n};1' file
Run Code Online (Sandbox Code Playgroud)