findコマンドを通じてAWK上のUnixの頭を適用します
質問
私は、検索によって与えられたファイルの一覧で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
なしています。
所属していません StackOverflow