一致する行の最初の項目をすべて増分数字に置き換えるには?

一致する行の最初の項目をすべて増分数字に置き換えるには?

このようなファイルがあります。

...
1562 first part
1563 H     col3 H col4
1564 H     col3 H col4
...
3241 H     col3 H col4
3242 third part
...

H各行の最初の行をそのH#発生#回数に置き換えたいと思います。出力は次のようになります。

...
1562 first part
1563 H1    col3 H col4
1564 H2    col3 H col4
...
3241 H1652 col3 H col4
3242 third part
...

これまで私は次のことを試しました。

max=`grep -c ' H ' b`
while [[ "$i" -le $max ]];do
  grep -m $i ' H ' b|tail -n1|sed "s/H/H$i/1"
  let i=i+1
done

このコードは遅く、置き換えるすべての行を読み取る必要があり、ファイルの最初の部分と3番目の部分を追加することはできません。これを行うより良い方法はありますか?たぶんちょっと?ありがとうございます。

ベストアンサー1

たとえば、次のように使用できます。

$ awk '/H/{sub("H", "H"++v)}1' file
1562 first part
1563 H1     col3 H col4
1564 H2     col3 H col4

3241 H3     col3 H col4
3242 third part
...

その後、それを含む行を見つけて増え続けるH変数に置き換えます。単一のパターンではなく、一致するすべてのパターンでこの変更を実行したい場合は、代わりに使用できます。HHgsub()sub()

最後の条件1はtrue条件なので、デフォルトのawkジョブである行{print $0}全体を印刷することを行います。

おすすめ記事