0

トレーニングと対応するテストファイルでいっぱいの 2 つのフォルダーがあり、シェル スクリプトを使用してフィッティング ペアを相互に実行したいと考えています。

これは私がこれまでに持っているものです:

for x in SpanishLS.train/*.train
do
    timbl -f $x -t SpanishLS.test/$x.test
done

これは、1 つのディレクトリを取り込んで、別のfile1(-n).trainディレクトリを探し、. 代わりに、もちろん存在しないというファイルを探します。私がやろうとしたことは役に立ちませんでしたが、スクリプトが正しいファイルを見つけられるように切り捨てられますが、これを行うたびに切り捨てが早すぎて、スクリプトがファイルを見つけられなくなります。file1(-n).testtimblSpanishLS.train/file1(-n).train.test$x$x.train

これをどのようにコーディングすればよいですか?

4

3 に答える 3

4

私があなたを正しく理解した場合、これは仕事をします:

for x in SpanishLS.train/*.train
do
    y=${x##*/}  # strip basepath
    y=${y%.*} # strip extention
    timbl -f $x -t SpanishLS.test/$y.test
done
于 2012-08-12T17:38:01.133 に答える
2

使用basename:

for x in SpanishLS.train/*.train
do
    timbl -f $x -t SpanishLS.test/$(basename "$x" .train).test
done

これにより、ディレクトリの接頭辞と.train接尾辞が から削除$xされ、必要な名前が作成されます。

(bashおよびその他のPOSIX 準拠のシェル) では、外部プログラムを呼び出すことなくbasename、2 つのシェルパラメータ展開を使用して操作を実行できます。(2 つの拡張を 1 つに結合する方法はないと思います。)

for x in SpanishLS.train/*.train
do
    y=${x##*/}                                        # Remove path prefix
    timbl -f $x -t SpanishLS.test/${y%.train}.test    # Remove .train suffix
done

注意: bashPOSIX で定義されていないかなりの数の (便利な) 展開をサポートしています。たとえば、${y//.train/.test}bash-only 表記 (またはbash互換シェル表記) です。

于 2012-08-12T17:33:51.140 に答える
0

.trainファイル名に出現するすべての を次のように置き換えます.text

timbl -f $x -t $(echo $x | sed 's/\.train/.text/g')
于 2012-08-12T17:34:58.940 に答える