特定の数の特定の文字を含む行を印刷します。

特定の数の特定の文字を含む行を印刷します。

多くのファイルパスとその情報を格納する大きなテキストがあります。

# just for demostration
/a/b/c/d/e
/a/b/c/d
/a/b/c
/a/b
/a
/b/c
/b
/c/d
/c
....

特定の数の特定の文字を持つ文字だけを表示したいです。例えば、

  1. 単一/
  2. 2個以下/

これにより、ルートフォルダのみを抽出するか、最初のレベルのサブフォルダのみを抽出します。

ベストアンサー1

Awk解決策:

- 1つだけ/

awk -v sep=1 'BEGIN{ FS=OFS="/"; sep += 1 }NF == sep' file

出力:

/a
/b
/c

- 2個以下/

awk -v sep=2 'BEGIN{ FS=OFS="/"; sep += 1 }NF <= sep' file

出力:

/a/b
/a
/b/c
/b
/c/d
/c

  • sep- 変更可能仕切りセダ
  • FSおよびOFS- は、それぞれフィールド区切り記号と出力フィールド区切り記号です。
  • NF- 代表するフィールドの総数

上記の方法を1つのコマンドにまとめる必要がある場合awk

awk -v sep=1 'BEGIN{ FS=OFS="/"; sep += 1 }(sep==2 && NF==sep) || (sep>2 && NF<=sep)' file

おすすめ記事