我有一个脚本从输入文件中提取文件名,并且应该读取每一行(文件名)并解压缩指定的文件,将解压缩的内容保存为单个文件。但是,我无法让我的计数器工作,只需将所有解压缩的文件放在一个大文件中。
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"
答案 0 :(得分:1)
file="/home/input.txt"
grep -Po '/.*?/.*?/' $file > filenames.txt
structures='filenames.txt'
i=1
while IFS= read "line"
do
gunzip -c 'ens'$line'traj.pdb.gz' >> 'output'$i'.pdb'
i=$(expr $i + 1)
done <$structures
rm $structures
几个逻辑错误,计数器必须在while循环中被罚款为one
,而计数器+1
应该在循环内部,同样对于你需要使用的计数器{ {1}}在这种情况下,我使计数器从expr,
开始,因此第一个条目将获得此值。另外关于1
的参数我真的不明白你在做什么,如果它有效,那么很酷,或者在参数之前和之后使用while loop
。