テキストファイルから文字列の親セットを削除する

テキストファイルから文字列の親セットを削除する

ディレクトリのリストを含むファイルがあります。

/a/b
/a/b/c /a/b/
d /a/ b /
e
/a/c
/a/c/b
/a/c/d /
a/d/e /
a/d/e /f /a/e/f/g /a/e/ f /g
/
h
...

私は/a/b、/a/c、/a/d/e、および/a/e/f/gだけを取得したいと思います。つまり、他の行のサブセットが前にある行を除外したいということです。サブディレクトリの深さは任意であるため、2、3、4などに降りて、一意のサブディレクトリを見つけることができます。

ベストアンサー1

入力がソートされたと仮定し、プレフィックスを確認して変更したら更新するのはどうですか?

$ awk 'NR == 1 || ! match($0, "^" pfx) {print; pfx = $0}' file
/a/b
/a/c

注:これは正規表現の一致であるため、アイテムに正規表現の特殊文字が含まれている場合は適切ではありません。 FWIWは、このコンテキストでは特殊文字として処理されないか、処理されないgawkようmawkです。/

おすすめ記事