awkまたはsedを使用して各行に(行番号* 4)を追加するには?

awkまたはsedを使用して各行に(行番号* 4)を追加するには?

mb0.h16進数がいくつかあります。

B0000000
B80806B0
B0000000

まもなく...

以下のcmdを使用して次のテキストを追加しました。

sed -i 's/\$/);/' ../mb0.h
sed -i 's/^/PS_Out(TILE_ADDR(0,0)+0x00020000+, /' ../mb0.h

これにより、以下のようにテキストが生成されます。

PS_Out(ADDR(0,0)+0x00020000+, B0000000);
PS_Out(ADDR(0,0)+0x00020000+, B8080050);
PS_Out(ADDR(0,0)+0x00020000+, B0000000);
PS_Out(ADDR(0,0)+0x00020000+, B8080954);
PS_Out(ADDR(0,0)+0x00020000+, B0000000);
PS_Out(ADDR(0,0)+0x00020000+, B80806B0);
PS_Out(ADDR(0,0)+0x00020000+, 00000000);
PS_Out(ADDR(0,0)+0x00020000+, 00000000);
PS_Out(ADDR(0,0)+0x00020000+, B0000000);

まもなく...

私は出力が欲しい -0、4、8 .... 4*(行番号-1)が太字で下に追加されます。

PS_Out(アドレス(0,0)+0x00020000+0、B0000000)。
PS_Out(アドレス(0,0)+0x00020000+4、B8080050)。
PS_Out(アドレス(0,0)+0x00020000+8、B0000000)。
PS_Out(アドレス(0,0)+0x00020000+12、B8080954)。
PS_Out(アドレス(0,0)+0x00020000+16、B0000000)。
PS_Out(アドレス(0,0)+0x00020000+20、B80806B0)。
PS_Out(アドレス(0,0)+0x00020000+24、00000000);
PS_Out(アドレス(0,0)+0x00020000+28、00000000);
PS_Out(アドレス(0,0)+0x00020000+32、B0000000)。

まもなく...

入力ファイルのテキストを生成するためにsedを使用していますが、sed自体を使用してパターンマッチング後に数字を挿入できるのか、可能であればawkコマンドを使用できるのかわかりません。解決に役立つ -

答え1

マイナーawk

awk '{print "PS_Out(ADDR(0,0)+0x00020000+"(NR-1)*4", "$0");"}' ../mb0.h

sedGNUなどの内部編集の場合は、GNUで1を使用するか、次に切り替えること-iができます(GNUがコピーした場所)。-i /usr/share/awk/inplace.awkawkperlsed-i

perl -i -lne 'print "PS_Out(ADDR(0,0)+0x00020000+", ($.-1)*4, ", $_);"' ../mb0.h

^使用しないでください-i inplace現在の作業ディレクトリから最初に拡張機能をgawkロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

答え2

次の手順を完了してください。

i=0
awk -v i="$i" '{print "PS_Out(ADDR(0,0)+0x00020000+"i", "$1");";i=i+4}' file1.txt

出力

PS_Out(ADDR(0,0)+0x00020000+0, B0000000);
PS_Out(ADDR(0,0)+0x00020000+4, B80806B0);
PS_Out(ADDR(0,0)+0x00020000+8, B0000000);

関連情報