从路径列表中过滤冗余路径

Jos*_*nce 6 directory text-processing filenames

我有一个相对路径列表,例如:

dir1
dir2
dir2/dir3
dir2/file1
dir3/file2
dir3/dir4
dir3/dir4/file3
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,说明符dir2/file1(例如)是多余的,因为dir2条目将包含此文件。

我想要做的,本质上是从给定的路径列表中删除冗余路径。上面的示例将输出以下内容:

dir1
dir2
dir3/file2
dir3/dir4
Run Code Online (Sandbox Code Playgroud)

请注意,指定的文件和目录不必实际存在于文件系统中。

我愿意使用任何常见的 Unix 命令(sed、awk、perl 等)。

Jos*_*nce 0

好吧,我要回答我自己的问题。

我根据 @pradeepchhetri 的解决方案制作了自己的 awk 脚本。

cat data.txt | sort | awk '
BEGIN{FS=OFS="/";}{
    path=$0;
    for(i=NF;i>0;i--){
        NF--;
        if($0 in paths){next;}
    }
    paths[path]=path;
}
END{for(path in paths){print path;}}' | sort
Run Code Online (Sandbox Code Playgroud)

这对我的目的有用。