如何使用 awk 或 sed 在每行中追加(行号 * 4 )?

如何使用 awk 或 sed 在每行中追加(行号 * 4 )?

mb0.h有一些十六进制数字

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

对于就地编辑,就像 GNUsed的一样-i,您可以将-i /usr/share/awk/inplace.awk1 与 GNU 一起使用awk,或切换到perl(GNU从中sed复制的位置-i):

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

^不使用-i inplaceas尝试首先从当前工作目录gawk加载inplace扩展(asinplace或),有人可能已经在其中植入了恶意软件。随系统提供的扩展inplace.awk的路径可能会有所不同,请参阅输出inplacegawkgawk '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);

相关内容