簡體   English   中英

for循環中的zcat文件名擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM