我有一个带有两个列的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] = $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