![如何使用 awk 或 sed 在每行中追加(行号 * 4 )?](https://linux22.com/image/209691/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20awk%20%E6%88%96%20sed%20%E5%9C%A8%E6%AF%8F%E8%A1%8C%E4%B8%AD%E8%BF%BD%E5%8A%A0%EF%BC%88%E8%A1%8C%E5%8F%B7%20*%204%20%EF%BC%89%EF%BC%9F.png)
我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.awk
1 与 GNU 一起使用awk
,或切换到perl
(GNU从中sed
复制的位置-i
):
perl -i -lne 'print "PS_Out(ADDR(0,0)+0x00020000+", ($.-1)*4, ", $_);"' ../mb0.h
^不使用-i inplace
as尝试首先从当前工作目录gawk
加载inplace
扩展(asinplace
或),有人可能已经在其中植入了恶意软件。随系统提供的扩展inplace.awk
的路径可能会有所不同,请参阅输出inplace
gawk
gawk '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);