【问题标题】:How to prepend -A, -B, and -C to the names of files in bash? Similar to Python's zip function如何在 bash 中的文件名前添加 -A、-B 和 -C?类似于 Python 的 zip 函数
【发布时间】:2019-07-26 09:05:01
【问题描述】:

我正在尝试在bash 中执行以下操作:

>>> import glob
>>> FILES = glob.glob("testing_output/test/intermediate/metawrap_output/initial_binning/*_bins")
>>> " ".join(map(lambda x:" ".join(x), zip(["-A", "-B", "-C"], FILES)))
'-A testing_output/test/intermediate/metawrap_output/initial_binning/maxbin2_bins -B testing_output/test/intermediate/metawrap_output/initial_binning/concoct_bins -C testing_output/test/intermediate/metawrap_output/initial_binning/metabat2_bins'

我可以到达FILES 部分,但我不知道如何到达最后一行。我想这样做的原因是有时FILES 中的文件数将是1-3。希望是 3,但有时会是 2 或 1。

我的问题是,根据可用文件的数量,我如何才能在本质上预先添加 -A-B-C

也许这会有所帮助:

FILES=("testing_output/test/intermediate/metawrap_output/initial_binning/concoct_bins" "testing_output/test/intermediate/metawrap_output/initial_binning/maxbin2_bins" "testing_output/test/intermediate/metawrap_output/initial_binning/metabat2_bins")

echo ${FILES[*]}
testing_output/test/intermediate/metawrap_output/initial_binning/concoct_bins testing_output/test/intermediate/metawrap_output/initial_binning/maxbin2_bins testing_output/test/intermediate/metawrap_output/initial_binning/metabat2_bins

我能够做到这一点:

python -c """import glob; FILES = glob.glob('testing_output/test/intermediate/metawrap_output/initial_binning/*_bins'); print(' '.join(map(lambda x:' '.join(x), zip(['-A', '-B', '-C'], FILES))))"""

但我不知道如何将它保存到 bash 变量中。

【问题讨论】:

标签: bash iterator glob prepend


【解决方案1】:
files=("testing_output/test/intermediate/metawrap_output/initial_binning/concoct_bins" "testing_output/test/intermediate/metawrap_output/initial_binning/maxbin2_bins" "testing_output/test/intermediate/metawrap_output/initial_binning/metabat2_bins")
letters=({A..Z})

for ((i=0; i<${#files[@]}; i++)); do echo "-${letters[$i]} ${files[$i]}"; done

输出:

-A testing_output/test/intermediate/metawrap_output/initial_binning/concoct_bins -B testing_output/test/intermediate/metawrap_output/initial_binning/maxbin2_bins -C testing_output/test/intermediate/metawrap_output/initial_binning/metabat2_bins

【讨论】:

  • var=$(for ((i=0; i&lt;${#files[@]}; i++)); do echo "-${letters[$i]} ${files[$i]}"; done) 谢谢!就是这样!
猜你喜欢
  • 2017-04-19
  • 2019-05-03
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多