短い共通ルートディレクトリに基づいてディレクトリリストテキストファイルをフィルタリングします。

短い共通ルートディレクトリに基づいてディレクトリリストテキストファイルをフィルタリングします。

.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 は、与えられたレコードの最後の部分が次の行に含まれているかどうかを決定します。重複していない行のみを出力します。

関連情報