2014-01-16 5 views
0

Я получил эти файлы:zcat в цикл

bonds.txt.gz 
bonds_201307.txt.gz 
bonds_201308.txt.gz 
bonds_201309.txt.gz 
bonds_201310.txt.gz 
bonds_201311.txt.gz 
bonds_201312.txt.gz 

У меня есть цикл, чтобы пройти через файлы, распаковать их и найти строку с Grep:

for f in `ls *.txt.gz`; do echo $f; zcat $f | grep MYBOND; done 

Если Я бегу это я получаю следующее:

bonds.txt.gz 
zcat: bonds.txt.gz.gz: No such file or directory 
bonds_201307.txt.gz 
zcat: bonds_201307.txt.gz.gz: No such file or directory 
bonds_201308.txt.gz 
zcat: bonds_201308.txt.gz.gz: No such file or directory 
bonds_201309.txt.gz 
zcat: bonds_201309.txt.gz.gz: No such file or directory 
bonds_201310.txt.gz 
zcat: bonds_201310.txt.gz.gz: No such file or directory 
bonds_201311.txt.gz 
zcat: bonds_201311.txt.gz.gz: No such file or directory 
bonds_201312.txt.gz 
zcat: bonds_201312.txt.gz.gz: No such file or directory 

Похоже zcat расширяет имя файла с дополнительным .gz Howe ver его не делать, когда я пытаюсь zcat файл из командной строки просто подбирает имя файла, которое предоставляется и выполняет свою работу. Почему это происходит при вызове в цикле?

Я знаю, что могу достичь того же, используя zgrep или find, но все еще заинтересованный в понимании этого поведения zcat. Спасибо!

+0

Какую версию 'zcat' вы используете? 'zcat --version' – imp25

+0

версия:' zcat 1.3.5' – LWNirvana

ответ

4

Я попробовал ваш сценарий, не проблема, но если я устанавливаю alias ls='ls --color=always', у меня будет один и тот же вопрос

может быть, ваш ls возвращает некоторые скрытые символы, такие как цветовой код
вы можете попробовать

for f in `\ls *.txt.gz` 

, но вы могли бы использовать

for f in *.txt.gz вместо

for f in `ls *.txt.gz` 

и если ваша система имеет zgrep, вы могли бы использовать zgrep MYBOND $f вместо zcat $f | grep MYBOND

Этот код будет выглядеть следующим образом:

for f in *.txt.gz; do echo "$f"; zgrep MYBOND "$f"; done 
+0

Спасибо * .txt.gz работает нормально. Я упомянул btw, что знаю, что zgrep будет работать, но я просто хотел понять, что происходит. – LWNirvana

+0

Я обновил свой ответ, пожалуйста, проверьте, имеет ли ваш 'ls' псевдоним' --color = always' – ray

+0

Попробуйте 'ls * .txt.gz | cat -A', чтобы увидеть скрытые символы, которые выводит 'ls'. –