我有一个脚本从输入文件中提取文件名,应该读取每行(文件名)并解压缩指定的文件,将解压缩的内容保存为单个文件。但是,我无法让我的计数器工作,只是将所有解压缩的文件放在一个大文件中。计数器在bash脚本
Input file contains a list:
ens/484/59/traj.pdb 0.001353
ens/263/39/traj.pdb 0.004178
ens/400/35/traj.pdb 0.004191
我使用regex /.*?/.*?/
提取,我想解压缩文件,并命名每个output{1..40}.pdb
- 而不是我得到一个输出文件:output1.pdb
其中包含40个解压缩文件中的所有内容。
我的问题是:如何纠正我的柜台,以实现所需的命名方案?
#!/bin/bash
file="/home/input.txt"
grep -Po '/.*?/.*?/' $file > filenames.txt
i=$((i+1))
structures='filenames.txt'
while IFS= read line
do
gunzip -c 'ens'$line'traj.pdb.gz' >> 'output'$i'.pdb'
done <"$structures"
rm "$structures"
可能是你打算把'i = $((i + 1))'放在循环中吗? – mustaccio
是的,你说得对。 – EA00
@ EA00记得双引号'$ line',否则如果它包含空格,你的代码将会破坏:'gunzip -c'ens'“$ line”'traj.pdb.gz'>> ...'或者:'gunzip -c“ens $ {line} traj.pdb.gz”>> ...' – andlrc