awkはサブディレクトリのファイルを検索しませんか?

awkはサブディレクトリのファイルを検索しませんか?

awkを使用して複数のファイルから特定の文字列を検索しようとしたときに返されます。

'Example' is a directory: skipped.

awkを使用してすべてのサブディレクトリとファイルを検索する方法は?

使用例、

awk -F: '$3 ~ /example/' * > C:/out.txt

答え1

これはシェルワイルドカードの問題であり、awk再帰的にglobするにはbashglobstarオプションを有効にする必要があります。

shopt -s globstar

グローバルスター

設定されている場合、パス名拡張コンテキスト**で使用されるパターンは、すべてのファイルとゼロ以上のディレクトリとサブディレクトリと一致します。パターンの後に/が続くと、ディレクトリとサブディレクトリのみが一致します。

これにより、次のことができます。

awk -F: '$3 ~ /example/' ** > C:/out.txt

ディレクトリ自体をスキップするエラーはまだ発生しますが、そのディレクトリでも繰り返されます。 stderrを/ dev / nullにリダイレクトすることでエラーを隠すことができます。

awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null

答え2

find次の組み合わせを使用することをお勧めしますawk

find -type f -exec awk -F: '$3 ~ /example/' {} > c:/out.txt \;

メモ: find*以下のコメントで正しく指摘したように、単純な交換ではありません。find探しているファイルセットを正確に返すには、パラメータを調整する必要があります。

メモ:A >(相対的)はリダイレクトされる出力>>なので、まだ必要です。find

メモ:これを使用する場合は、cmderWindows findの代わりにGNU findを呼び出すように注意する必要がありますfind.exe。バラよりこここれらのあいまいさを克服する方法を見つけてください。

関連情報