如何使用bash脚本循环遍历两个文件

时间:2013-09-20 06:09:03

标签: bash loops

我有几个关于bash脚本的问题。

我有一个包含这些名称的文件(file_in.txt)

aphid_splitseq.1.fasta.annot.xml
aphid_splitseq.2.fasta.annot.xml
aphid_splitseq.3.fasta.annot.xml
aphid_splitseq.4.fasta.annot.xml
aphid_splitseq.5.fasta.annot.xml

我有另一个文件(file_out.txt),就像这些名字一样

aphid_splitseq_1
aphid_splitseq_2
aphid_splitseq_3
aphid_splitseq_4
aphid_splitseq_5

现在我想要这样的陈述

java -cp *:ext/*: es.blast2go.prog.B2GAnnotPipe -in aphid_splitseq.1.fasta.annot.xml -out results/aphid_splitseq_1 -prop b2gPipe.properties -v -annot -dat 

所以基本上我想循环遍历file_in.txt和file_out.txt中的每一个,并分别用i和j替换-in和-out的值。

我在bash中试过它......但似乎没有用。这是......

for i in `cat file_in.txt`; for j in `cat file_out.txt`; do java -cp *:ext/*: es.blast2go.prog.B2GAnnotPipe -in $i -out results/$j -prop b2gPipe.properties -v -annot -dat; done; done

其次我想知道是否有办法在bash中将aphid_splitseq.1.fasta.annot.xml转换为aphid_splitseq_1?

由于 众议员

3 个答案:

答案 0 :(得分:2)

paste可能会有所帮助:

#!/bin/bash

paste file_in.txt file_out.txt | while read if of; do
  echo "-in $if -out $of"
done

产率:

-in aphid_splitseq.1.fasta.annot.xml -out aphid_splitseq_1
-in aphid_splitseq.2.fasta.annot.xml -out aphid_splitseq_2
-in aphid_splitseq.3.fasta.annot.xml -out aphid_splitseq_3
-in aphid_splitseq.4.fasta.annot.xml -out aphid_splitseq_4
-in aphid_splitseq.5.fasta.annot.xml -out aphid_splitseq_5

你可以修改它以获得所需的行为。

答案 1 :(得分:0)

只要两者你的列表只是重复使用连续数字的同一种名称,你就不应该迭代文件了。相反,只需计算一个变量并在每个步骤中执行的任何命令中使用它。例如:

COUNT=1
while [ $COUNT -lt 5 ]; do
  mv inputfile$COUNT outputfile$COUNT
  let COUNT++
done

答案 2 :(得分:-3)

使用时

     While read line 
     do 
       line=$(echo -ne $line | sed or awk)
     done < Directory/filename.t