我拿到了这些文件:
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我有一个for循环来遍历这些文件,解压缩它们,并找到一个带有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扩展文件名,但是当我尝试从命令行中提取一个文件名并完成它的工作时,它就不会这么做了。为什么在循环调用时会发生这种情况?
我知道我可以通过使用zgrep或find来达到同样的目的,但我仍然对理解zcat的这种行为感兴趣。谢谢!
发布于 2014-01-16 09:13:17
我尝试了您的脚本,没有问题,但如果我设置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"; donehttps://stackoverflow.com/questions/21157323
复制相似问题