yen*_*yen 7 linux grep sed awk text-processing
前任:
输入文件
A<0>
A<1>
A_D2<2>
A_D2<3>
A<4>
A_D2<6>
A<9>
A_D2<10>
A<13>
Run Code Online (Sandbox Code Playgroud)
期望输出:
A<0>
A<1>
A_D2<2>
A_D2<3>
A<4>
-----
A_D2<6>
-----
-----
A<9>
A_D2<10>
-----
-----
A<13>
Run Code Online (Sandbox Code Playgroud)
只关心尖括号中的数字。
如果数字不连续,则添加一些符号(或仅添加换行符)直到数字继续。
在这种情况下,缺少数字 5、7、8、11 和 12。
任何人都可以通过使用 awk 或 sed(甚至是 grep)命令来解决这个问题吗?
我是 Linux 的初学者。请解释整个命令行的细节。
Kus*_*nda 11
不建议使用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>
Run Code Online (Sandbox Code Playgroud)
该awk
代码假定0
应该是第一号,然后保持希望在变量的当前行的行号nr
。如果从需要插入一行或几行的输入中读取一个数字,这由while
循环完成(它也会增加nr
变量)。
输入的数字<...>
通过指定它被解析出来,<
并且>
应该用作字段分隔符。然后数字在$2
(第二个字段)中。