Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用awk语言从包含函数ID的txt文件构造函数调用图_Bash_Performance_File_Awk_Function Calls - Fatal编程技术网

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

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] = $

我有一个包含两列的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
$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不,它不会出现。因为我们在之前的流程中已经提到过它。