Linux

如果文本中的數字不連續,如何添加一些符號(或僅添加換行符)

  • September 3, 2019

前任:

輸入文件

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>

只關心尖括號中的數字。

如果數字不連續,則添加一些符號(或僅添加換行符)直到數字繼續。

在這種情況下,缺少數字 5、7、8、11 和 12。

任何人都可以通過使用 awk 或 sed(甚至 grep)命令來解決這個問題嗎?

我是 Linux 的初學者。請解釋整個命令行的細節。

不建議使用grepor來執行此操作,因為它不能計數,並且真的很難在其中進行任何類型的算術運算(它必須是基於正則表達式的計數,對於大多數人來說,除了dedicated之外,這不是入門)。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變數)。

輸入的數字<...>通過指定解析出來,<並且>應該用作欄位分隔符。然後數字在$2(第二個欄位)中。

引用自:https://unix.stackexchange.com/questions/538715