Linux
如果文本中的數字不連續,如何添加一些符號(或僅添加換行符)
前任:
輸入文件
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 的初學者。請解釋整個命令行的細節。
不建議使用
grep
or來執行此操作,因為它不能計數,並且真的很難在其中進行任何類型的算術運算(它必須是基於正則表達式的計數,對於大多數人來說,除了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
(第二個欄位)中。