私はいくつかの入力ファイルを処理し、ファイルとして出力を取得するために単純な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
その後、出力ファイルのパスとして使用されます。