[英]zcat filename expansion in for loop
我得到了這些文件:
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
zcat $f | grep MYBOND
代碼將如下所示:
for f in *.txt.gz; do echo "$f"; zgrep MYBOND "$f"; done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.