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 等)。
好吧,我要回答我自己的问题。
我根据 @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)
这对我的目的有用。