テキストの数字が連続していない場合にいくつかの記号(または改行文字)を追加する方法

テキストの数字が連続していない場合にいくつかの記号(または改行文字)を追加する方法

前任者:

入力ファイル

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初心者です。コマンドライン全体について詳しく説明してください。

ベストアンサー1

grep計算できず、危険なので、使用または実行しないことをお勧めします。sedgrepsed本当に大変ですすべての種類の算術を実行します(正規表現ベースの計算でなければなりません。これは、以下を除いてほとんどの人にとって不可能です)。呪われた)。

$ 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。入力から数字を読み取るには、1つ以上の行を挿入する必要がある場合は、ループを使用して実行されます(変数もwhile増えます)。nr

入力された数字は<...>指定されたとおりに解析され、<フィールド>区切り文字として使用する必要があります。数字は$2(2番目のフィールド)にあります。

おすすめ記事