2012-02-15 91 views
2

我有一系列的分隔文件,其中一些有一些不好的數據,可以通過對它們進行列計數來識別。我可以使用以下命令找到它們:使用管道與查找命令

find ./ -name 201201*gz -mtime 12 

它們都是gzipped,我不想將它們全部解壓縮。所以檢查列計數我一直在做我跑這是對每個文件第二個命令:

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

我知道我不能對每個文件運行一個命令-exec通過尋找,卻怎麼也我也讓它穿過管道?一對夫婦的事情,我試過,均未我希望工作,這兩者都不做:

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

我會使用一個明確的循環形式給出:

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

這似乎做的第一個文件,然後給我: xargs的:用zcat:由信號終止13 – Ilion 2012-02-15 18:13:12

+0

嗯真,似乎ZCAT假定約翰內斯的解決方案是正確的。你需要對每個文件進行zcat並將其管理爲awk。 – bensnider 2012-02-15 18:21:35