for循环中的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

我有一个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扩展文件名然而,当我试图从命令行zcat一个文件时,它并没有做到这一点,只是选择了提供的文件名并完成了它的工作。为什么在循环中调用时会发生这种情况?

我知道我可以通过使用zgrep或find来实现同样的目的,但我仍然有兴趣了解zcat的这种行为。谢谢

我试过你的脚本,没有问题,但如果我设置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

相关内容

  • 没有找到相关文章

最新更新