forループにコマンド出力を追加する

forループにコマンド出力を追加する

私はいくつかの入力ファイルを処理し、ファイルとして出力を取得するために単純なforループを使用しています。私が使うものは

for k in ../some_directory/*.txt; 
    do command (containing -i $k -o outputfile.txt); 
done

各ループは出力を提供します。出力をファイルに記録したい。このループは古いファイルをすべて置き換え、各ループの出力を含む複数のoutputfile.txtファイルを提供します。ファイルにコマンドを追加するには?画面出力ではなく、各コマンドの出力が必要です。

注:私はそれについて話していませんこれまたはこれ

答え1

希望の結果を得るには2つのオプションがあります。

for k in /path/to/*.txt; do
    some_command -i "$k" >> /path/to/output.txt
done

または

for k in /path/to/*.txt; do
    some_command -i "$k"
done >> /path/to/output.txt

プログラムが標準出力に書き込まない場合ただ指定されたファイルに書き込むには、-o次のようにします。

for k in /path/to/*.txt; do
    some_command -i "$k" -o /tmp/output.txt
    cat /tmp/output.txt >> /path/to/real_output.txt
done
rm /tmp/output.txt

答え2

より簡単な解決策を考えました。入力と出力と同じファイル名を指定するだけです。すべての変更が追加され、以前の出力ファイルがバックアップされたため、問題が解決されました。

ありがとう

答え3

for name in ../some_directory/*.txt; do
    outfile="$name"-out
    command (containing -i "$name" -o "$outfile"); 
done

これは単に入力ファイル名に文字列を追加して出力ファイル名を設定します-out

ファイル名へのパスも含まれているため、これはoutfile=out-"$name"機能しません。$name

ファイル名の前に文字列を追加しますか?あなたはこれを行うことができます

outdir=${name%/*}        # remove filename component from $name
outfile=out-${name##*/}  # remove the path component from $name (and prepend string)

$outdir/$outfileその後、出力ファイルのパスとして使用されます。

関連情報