在循环中获取文件作为脚本的输入

时间:2012-12-23 13:23:49

标签: shell loops

我有一堆文件和我在其上运行的脚本。该脚本将2个文件作为输入,所有文件都采用以下格式:a.txt1 a.txt2

现在我使用的脚本是这样的:foo.sh a.txt1 a.txt2

我必须在250对上运行此脚本(例如a1.txt1 a1.txt2到a250.txt1 a250.txt2) 我是通过输入文件名手动完成的。我想知道有没有办法自动化这个过程。所有这些对都在同一个文件夹中,有没有办法在所有对上循环该过程?

我希望我说清楚。

谢谢。

具体来说,这些是一些示例文件名:

  • T39_C.txt2
  • T39_D.txt1
  • T39_D.txt2
  • T40_A.txt1
  • T40_A.txt2
  • T40_B.txt1
  • T40_B.txt2
  • T40_C.txt1
  • T40_C.txt2
  • T40_D.txt1
  • T40_D.txt2
  • unmatched.txt1
  • unmatched.txt2
  • WT11_A.txt1
  • WT11_A.txt2
  • WT11_B.txt1
  • WT11_B.txt2
  • WT11_C.txt1

2 个答案:

答案 0 :(得分:2)

假设所有文件都是成对的(即<something>.txt1<something>.txt2,那么您可以执行以下操作:

1. #!/bin/bash
2.
3. for txt1 in *.txt1; do
4.    txt2="${txt1%1}2"
5.    # work on $txt1 and $txt2
6. done

在第3行中,我们使用shell glob来获取以.txt1结尾的所有文件。第4行,我们使用替换删除最终1并将其替换为2。实际工作在第5行完成。

答案 1 :(得分:0)

#FOR当前目录中的每个文件除了.txt2的文件 *
 for ls | sort | grep -v .txt2       做

       *#THE FIRST .txt1 file is $i*
       first="$i"

       *#THE SECOND IS THE SAME EXCEPT WITH .txt2 SO WE REPLACE THE STRING*
       second=`echo "$i" | sed 's/.txt1/.txt2/g'`

        #WE MAKE THE ASSUMPTION FOO.SH WILL ERROR OUT IF NOT PASSED TWO PARAMETERS
        if !(bash foo.sh $first $second); then
        {
           echo "Problem running against $first $second"
         }
           else
        {
         echo "Ran against $first $second"
        }
        fi
done