各ハッシュ記号の後に141から始まるシーケンス番号を追加するにはどうすればよいですか?

各ハッシュ記号の後に141から始まるシーケンス番号を追加するにはどうすればよいですか?

プログラムでこのテキストファイルを変更する方法

put returns between paragraphs#
20170218
for linebreak add 2 spaces at end# blah
_italic_ or **bold**#
20170219
20170220#
201702#21

この問題を解決するには、sedなどのツールを使用しますか?

put returns between paragraphs#141
20170218
for linebreak add 2 spaces at end#142 blah
_italic_ or **bold**#143
20170219
20170220#144
201702#14521

ベストアンサー1

sedは技術的に可能ですが(チューリング完全)、sedには算術演算がないため、非常に難しいです。これがawkの仕事です。

各行の最初の行だけを置き換えるには、置換の後に数字を増やすように#指示します。 awkは整数を文字列の10進表現に自動的に変換します。##

awk -v n=141 '/#/ {sub(/#/, "#" (++n))}'

すべての文字を置き換える#最も簡単な方法は、#フィールド区切り文字を作成し、最初のフィールドを除く各フィールドの先頭に数字を追加することです。

awk -v n=141 -F '#' '{for (i=2; i<=NF; i++) $i = (++n) $i}'

おすすめ記事