根据短公共根目录过滤目录列表文本文件

根据短公共根目录过滤目录列表文本文件

我在 .txt 文件中有一个类似于下面的目录列表

/Season_1/101
/Season_1/101/Thumbnails
/Season_1/101/Thumbnails/Branded
/Season_1/101/massive_screengrabs
/Season_1/102/massive_screengrab
/Season_1/102/thumbnails
/Season_1/102/thumbnails/Branded
/Season_1/103/Thumbnails
/ARCHIVE/480x360 v6/Season 2
/ARCHIVE/480x360 v6/Season 3
/ARCHIVE/480x360 v6/Season 4

我正在寻找一种方法来根据与列表的其余部分相比最短的公共根目录来过滤目录。结果如下所示。

/Season_1/101
/Season_1/102/massive_screengrab
/Season_1/102/thumbnails
/Season_1/103/Thumbnails
/ARCHIVE/480x360 v6/Season 2
/ARCHIVE/480x360 v6/Season 3
/ARCHIVE/480x360 v6/Season 4

另一个需要是与各种随机命名的目录兼容,因此任何使用“/Season_1/101”等字符串来解决此特定示例的内容都将不起作用,因为目录可以命名为任何名称。

任何帮助是极大的赞赏。

答案1

以下命令将适用于不包含空行的文本文件。如果您需要容纳空白行,则需要进行一些修改。

cat textfile | sort | awk 'BEGIN { FS="/" }; { if ( NR == 1 || $0 !~ lastField ) { print $0; lastField = $NF } }' > newtextfile

textfile您的文本文件在哪里,并且newtextfile您要将结果输出到哪里。> newtextfile如果您想在标准输出上查看结果,可以省略。

首先对文件进行排序,以便将其设置为 awk 从任何类似行的最短版本开始逐条记录迭代。 awk 确定给定记录的最后部分是否包含在下一行中。它只输出没有重复的行。

相关内容