前任:
输入文件
A<0>
A<1>
A_D2<2>
A_D2<3>
A<4>
A_D2<6>
A<9>
A_D2<10>
A<13>
所需的输出:
A<0>
A<1>
A_D2<2>
A_D2<3>
A<4>
-----
A_D2<6>
-----
-----
A<9>
A_D2<10>
-----
-----
A<13>
只需关心尖括号中的数字即可。
如果该数字不是连续的,则添加一些符号(或仅添加换行符),直到该数字继续为agian为止。
在这种情况下,数字5,7,8,11和12丢失了。
任何人都可以通过使用awk或sed(甚至grep)命令来解决此问题吗?
我是Linux的初学者。请解释整个命令行的详细信息。
不推荐使用grep
或sed
进行此操作,因为grep
它无法计数,并且sed
在其中很难进行任何算术运算(它必须是基于正则表达式的计数,对于大多数人而言,这是入门级的,除了专用的)。
$ awk -F '[<>]' '{ while ($2 >= ++nr) print "---"; print }' file
A<0>
A<1>
A_D2<2>
A_D2<3>
A<4>
---
A_D2<6>
---
---
A<9>
A_D2<10>
---
---
A<13>
该awk
代码假定0
应该是第一个数字,然后在变量中维护当前行的所需行号nr
。如果从输入中读取了需要插入一行或几行的数字,则此操作由while
循环完成(这也会使nr
变量递增)。
<...>
通过指定来解析出in的数字,<
并将>
其用作字段定界符。然后输入数字$2
(第二个字段)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句