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
  • unmatched.txt1
  • unmatched.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 行目では、シェル グロブを使用して、末尾が.txt1. 4 行目では、置換を使用して末尾を削除し、1それを に置き換え2ます。そして、実際の作業は 5 行目で行われます。

于 2012-12-23T13:27:42.980 に答える
0

#FOR EACH FILE IN THE CURRENT DIRECTORY EXCEPT FOR THE FILES WITH .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 に答える