このようなファイルがあります。
...
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
変数に置き換えます。単一のパターンではなく、一致するすべてのパターンでこの変更を実行したい場合は、代わりに使用できます。H
H
gsub()
sub()
最後の条件1
はtrue条件なので、デフォルトのawkジョブである行{print $0}
全体を印刷することを行います。