新しいアイテムを挿入するときにリスト番号を再割り当てする

新しいアイテムを挿入するときにリスト番号を再割り当てする

番号付きのエントリを含むテキストファイルがあります。

1. foo
2. bar 100%
3. kittens
4. eat cake
5. unicorns
6. rainbows

そして大きな数字が出るまで続く。その後、空行の後に新しいブロックが1から始まります。

たとえば、4を置き換えて新しい項目を挿入します。そして、ブロック内のすべての後続の項目に番号を付け直す必要があります。

1. foo
2. bar 100%
3. kittens
4. sunshine <
5. eat cake
6. unicorns
7. rainbows

ベストアンサー1

いつでも構文を使用して新しい項目を追加し、次の項目を使用してx. newentryすべての項目の番号を変更できます。

awk -F . -v OFS=. '{if (NF) $1 = ++n; else n = 0; print}'
  • -F .:フィールド区切り記号を.1に設定
  • -v OFS=.:同じ出力フィールド区切り記号(-F .の略語-v FS=.)。
  • {...}:いいえ状況したがって、内部コードは{...}各行で実行されます。
  • if (NF)、フィールド数が0より大きい場合。FSbeingの場合、.これは現在の行に少なくとも1つが含まれているかどうかを意味します.if (length)空でない行を確認することもできます。
  • $1 = ++n:最初のフィールド増分を設定しますn(最初は0、次に1、次に2...)。
  • else n = 0:else(NF == 0の場合)nを0にリセットします。
  • print:(修正できる)行を印刷します。

1構文はありますが、-F <extended-regular-expression>単一<extended-regular-expression>文字の場合は正規表現(.すべての文字が表示されている場合)として扱われず、その文字として扱われます。

おすすめ記事