我期待从源代码创建的文档,我有。 我一直环顾四周,像AWK好像它会工作,但到目前为止,我已经没有运气。 该信息在两个文件中,拆分file1.c
和file2.c
。
注 :我已经设置了程序自动生成环境。 该检测源的变化,并建立它。 我想生成包含自上次成功构建已修改的任何变量列表的文本文件。 我在寻找剧本将是一个生成后步骤,以及编译后运行会
在file1.c
我有一个函数调用(所有相同的函数)具有一个字符串名称来识别它们,如清单:
newFunction("THIS_IS_THE_STRING_I_WANT", otherVariables, 0, &iAlsoNeedThis);
newFunction("I_WANT_THIS_STRING_TOO", otherVariable, 0, &iAnotherOneINeed);
etc...
在函数调用中的第四个参数中包含字符串名称的价值file2
。 例如:
iAlsoNeedThis = 25;
iAnotherOneINeed = 42;
etc...
我期待输出列表以下列格式的TXT文件:
THIS_IS_THE_STRING_I_WANT = 25
I_WANT_THIS_STRING_TOO = 42
有没有做这个办法吗?
谢谢
这里是一个开始:
NR==FNR { # Only true when we are reading the first file
split($1,s,"\"") # Get the string in quotes from the first field
gsub(/[^a-zA-Z]/,"",$4) # Remove the none alpha chars from the forth field
m[$4]=s[2] # Create array
next
}
$1 in m { # Match feild four from file1 with field one file2
sub(/;/,"") # Get rid of the ;
print m[$1],$2,$3 # Print output
}
保存该script.awk
并与你的榜样产生运行它:
$ awk -f script.awk file1 file2
THIS_IS_THE_STRING_I_WANT = 25
I_WANT_THIS_STRING_TOO = 42
编辑:
您需要修改影响脚本的第一行:
NR==FNR && $3=="0," && /start here/,/end here/ {
你可以做到这一点的壳像这样。
#!/bin/sh
eval $(sed 's/[^a-zA-Z0-9=]//g' file2)
while read -r line; do
case $line in
(newFunction*)
set -- $line
string=${1#*\"}
string=${string%%\"*}
while test $# -gt 1; do shift; done
x=${1#&}
x=${x%);}
eval x=\$$x
printf '%s = %s\n' $string $x
esac
done < file1.c
假设:newFunction是在该行的开始。 没有遵循);
。 空白完全按照您的样品英寸 产量
THIS_IS_THE_STRING_I_WANT = 25
I_WANT_THIS_STRING_TOO = 42
您可以执行文件file2.c
这样的变量将在bash进行定义。 然后,你就只需要打印$iAlsoNeedThis
从中获取价值iAlsoNeedThis = 25;
这是可以做到的. file2.c
. file2.c
。
然后,你可以做的是:
while read line;
do
name=$(echo $line | cut -d"\"" -f2);
value=$(echo $line | cut -d"&" -f2 | cut -d")" -f1);
echo $name = ${!value};
done < file1.c
拿到THIS_IS_THE_STRING_I_WANT
, I_WANT_THIS_STRING_TOO
文本。