2012-02-15 8 views
2

私には一連の区切りファイルがありますが、その中にはいくつかの不良データがあり、その上で列カウントを行うことで認識できます。私は、次のコマンドでそれらを見つけることができます。findコマンドでパイプを使用する

find ./ -name 201201*gz -mtime 12 

彼らはすべてのgzipで圧縮されていると私はしたくないそれらすべてをアンアーカイブします。

zcat ./path/to/file.data | awk '{print NF}' | head 

私は-execで検索を介してファイル上でコマンドを実行しますが、どのようにすることができますすることができます知っている:だから私は、各ファイルの2番目のコマンドとして、これを実行している行ってきた列数をチェックします私もパイプを通過するようになるのですか?私は仕事に期待どちらも及びましたどちらも私が試したカップルの事、:

find ./ -name 201201*gz -mtime 12 -print -exec zcat {} \; | awk '{print NF}'| head 
find ./ -name 201201*gz -mtime 12 -print -exec "zcat {} | awk '{print NF}'| head" \; 

答えて

3

私は明示的なループaproach使用したい: xargsの::ZCAT:最初のファイルをやるようですし、その後、私に与えている

find . -name 201201*gz -mtime 12 | while read file; do 
    echo "$file: " 
    zcat "$file" | awk '{print NF}' | head 
done 
2

多かれ少なかれあなたパイプ物事検索経由のように:

find . -name "foo" -print0 | xargs -0 echo 

は、だからあなたのコマンドは次のようになります。

find ./ -name "201201*gz" -mtime 12 -print0 | xargs -0 zcat | awk '{print NF}'| head 

-print0xargs -0だけの特殊文字を含むファイルは、パイプを破るいけないことを確認するのに役立ちます。

+0

、信号によって13 – Ilion

+0

フム真の終了は、zcatのが前提としているようです閉鎖パイプ、ヨハネスの解決策は正しいです。各ファイルをzcatしてawkにパイプする必要があります。 – bensnider

関連する問題