親ディレクトリには、スペースで区切られた1つ以上のテキストファイルを含む複数のサブディレクトリがあります。
私が望むものを出力しますが、単一のファイルにのみ出力する次のコマンドがあります。INPUTFILE.txt
awk '{if (NF>4){print $1, $2, $3 , "0" } else {print $0}}' INPUTFILE.txt
何千ものサブディレクトリがあり、ファイル名が異なることを考えると、このコマンドを親ディレクトリのすべてのサブディレクトリにどのように適用できますか?
ベストアンサー1
まず、cd
目的の親ディレクトリに移動します。
次に、次を使用してコマンドをfind
実行しますawk
。
find -type f -exec awk '{if (NF>4){print $1, $2, $3 , "0" } else {print $0}}' {} +
説明する
- 既定では既に再帰的であるため、すべてのサブディレクトリに対してこれを行います。
-type f
f
ファイルやディレクトリ以外のファイルに検索を制限します。- この
-exec somecommand {} +
構文はコマンドを実行し、見つかったファイルパスをユーザーが作成した場所に配置します。{}
- このオプションは、クエリ結果をパラメータとして保存しながら1つ
+
のインスタンスのみを実行するため、より効率的です。一方、これを実行する別の方法(ここには示されていません)は、各ファイル名に対して一度awkを実行し、それほど効率的ではありません。awk
{}