質問

私は、検索によって与えられたファイルの一覧でAWKコマンドの出力上位10行にしたいです このスニペットを使用します:

$ find . -name "*.txt" -print -exec awk '$9 != ""'  \| head -n10 {} \;
私が処理されているファイル名をプリントアウトしたいということです。

注意も

しかし、なぜ私がこのようなエラーを取得します:

awk: cmd. line:2: fatal: cannot open file `|' for reading (No such file or directory)
./myfile.txt

これを行うには正しい方法は何ですか?

私は、パイプの前にバックスラッシュなしで試してみました。それでもそれがエラーを与えます:

find: missing argument to `-exec'
head: cannot open `{}' for reading: No such file or directory
head: cannot open `;' for reading: No such file or directory
役に立ちましたか?

解決

あなただけの最初の10行はの各時刻を表示することを見つけるからすべてのファイルにawkプログラムを実行したい場合は、

$ find . -name "*.txt" -print -exec awk '$9 != "" && n < 10 {print; n++}' {} \;

他のヒント

(|)を見つけるの-execでコマンドを実行すると、

、あなたはパイプ演算子のように、すべての素敵なシェルのものを得ることはありません。あなたがが好きな場合は、例えば、明示的にサブシェルを実行して、それらを取り戻すことができます:

見つけます。 -name -exec / binに/ shの-c '* .txtの' | \ "{}と呼ばれるテキストファイルをエコー15 -nヘッド";

Ashawleyの回答に基づいてます:

find . -name "*.txt" -print -exec awk '$9 != "" {print; if(NR > 9) exit; }' {} \;
私たちは10日、レコードの後のawkを出ると、

これは、より良い実行する必要があります。

使用awkのみ動作する必要があります:

find . -name "*.txt" -print -exec awk '{if($9!=""&&n<11){print;n++}}' {} \;

あなたも、このようにそれを行うことができます:

find . -name '*txt' -print -exec awk 'BEGIN {nl=1 ;print FILENAME} $9 !="" {if (nl<11) { print $0 ; nl = nl + 1 }}' {}  \;

headなしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top