Shell命令将字符串转换为C printf语句

时间:2018-02-06 19:37:55

标签: bash shell awk

我有一个文件" Hi.text"看起来像

valid = 0;
invalid = 0;
stats = 0;
inner_ufd = 0;
....
....

我想将hi.text文件内容的格式更改为

printf ( "valid       = %x", hi->valid );
printf ( "invalid     = %x", hi->invalid );
printf ( "stats       = %x", hi->stats );
.....
.....
.....

我尝试了几个awk命令,但似乎都没有。请建议一种方法将hi.txt转换为所需的输出。它们都是相同的大小" int" 4字节 。我只想将hi.txt格式化为所需的输出。我要将所需的文本格式复制到我的C程序

1 个答案:

答案 0 :(得分:4)

假设您的源文件是so.txt

$ awk '{ print "printf ( \""$1"       = %x\", hi->"$1");" }' so.txt 
printf ( "valid       = %x", hi->valid);
printf ( "invalid       = %x", hi->invalid);
printf ( "stats       = %x", hi->stats);
printf ( "inner_ufd       = %x", hi->inner_ufd);

使用printf,您可以获得更清晰的视图:

awk '{ printf "printf ( \"%-10s       = %%x\", hi->%s);\n", $1, $1 }' so.txt 
printf ( "valid            = %x", hi->valid);
printf ( "invalid          = %x", hi->invalid);
printf ( "stats            = %x", hi->stats);
printf ( "inner_ufd        = %x", hi->inner_ufd);

最后,要进行内部编辑,您可以使用-i inplace参数。

awk -i inplace '{ printf "printf ( \"%-10s       = %%x\", hi->%s);\n", $1, $1 }'  so.txt