bash脚本中的计数器

时间:2016-04-25 20:23:04

标签: bash counter

我有一个脚本从输入文件中提取文件名,并且应该读取每一行(文件名)并解压缩指定的文件,将解压缩的内容保存为单个文件。但是,我无法让我的计数器工作,只需将所有解压缩的文件放在一个大文件中。

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" 

1 个答案:

答案 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