Bash 使用awk语言从包含函数ID的txt文件构造函数调用图
我有一个包含两列的txt文件,每列都有函数ID,指示第一个函数调用第二个函数,如下所示: 1,4 12,5 4,8 8,1 5,23 现在,我将使用awk命令来查找函数调用流。例如,基于我文件的上述内容,我想提取1,4,8和12,5,23的流 对于每个流,我将继续添加函数ID,直到到达一个圆或文件的末尾。Bash 使用awk语言从包含函数ID的txt文件构造函数调用图,bash,performance,file,awk,function-calls,Bash,Performance,File,Awk,Function Calls,我有一个包含两列的txt文件,每列都有函数ID,指示第一个函数调用第二个函数,如下所示: 1,4 12,5 4,8 8,1 5,23 现在,我将使用awk命令来查找函数调用流。例如,基于我文件的上述内容,我想提取1,4,8和12,5,23的流 对于每个流,我将继续添加函数ID,直到到达一个圆或文件的末尾。 我的文件非常大,我不想使用python。您需要一个递归下降程序,如下所示: $ cat recurse.awk BEGIN { FS=OFS="," } { roots[NR] = $
我的文件非常大,我不想使用python。您需要一个递归下降程序,如下所示:
$ cat recurse.awk
BEGIN { FS=OFS="," }
{
roots[NR] = $1
map[$1] = $2
}
END {
for (rootNr=1; rootNr<=NR; rootNr++) {
root = roots[rootNr]
if ( !(seen[root]++) ) {
tree = root
descend(root)
print tree
}
}
}
function descend(root, branch) {
if (root in map) {
branch = map[root]
if ( !(seen[branch]++) ) {
tree = tree OFS branch
descend(branch)
}
}
}
$ awk -f recurse.awk file
1,4,8
12,5,23
$cat recurse.awk
开始{FS=OFS=“,”}
{
根[NR]=1美元
地图[$1]=$2
}
结束{
对于(rootNr=1;rootNr请共享您的输入和期望的输出文件以及提取输出的条件。@EdMorton-“直到我到达一个圆”我不清楚。@Ed Morton,我的文件只有两列,我想从上到下读取行。对于每一行,我不看前几行。在您的示例中,5,23 12,5 7,5我将有F1:5,23和F2:12,5和F3:7,5这三个流(F).但在我在问题内容中提到的示例中,我将使用F1:1,4,8 F2:12,5,23。您清楚吗?@EdMorton不,它不会出现。因为我们在之前的流程中已经提到过它。