0

我有一堆文件和一个我在它们上面运行的脚本。该脚本将 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
  • 不匹配的.txt1
  • 不匹配的.txt2
  • WT11_A.txt1
  • WT11_A.txt2
  • WT11_B.txt1
  • WT11_B.txt2
  • WT11_C.txt1
4

2 回答 2

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 行,我们使用替换来删除 final1并将其替换为2. 真正的工作在第 5 行完成。

于 2012-12-23T13:27:42.980 回答
0

#对于当前目录中的每个文件,除了带有 .txt2 *
for i in ls | sort | grep -v .txt2 do的文件

       *#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
于 2012-12-26T20:29:53.533 回答