使用 awk 语言从包含函数 ID 的 txt 文件构建函数调用图

Using awk language for constructing a function call graph from a txt file containing function IDs

我有一个包含两列的 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] = 
    map[] = 
}
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