*編集:すべての出力をファイルに追加することにしました。
編集するCSVファイルが40個あります。 20形式は、docA.csv、docB.csvなど、1文字だけが別の名前と一致します。他の20個もpair_docA.csv、pair_docB.csvなどの名前で一致します。
docA.csvとpair_docA.csvを編集して結合するコードがあります。上記の2つのファイルを呼び出して編集し、CombinedA.csvという名前で結合し、次に移動するループを作成するのが困難です。それから右。
誰でも基本的なbashスクリプトを書くのに役立ちますか?これが私が今まで持っているものです。私は1つのforループを試しましたが、今2つ(おそらく3つ)のforループを試しています。私はそれを繰り返し維持することを好みます。
set -x
DIR=/path/to/file/location
for file in `ls $DIR/doc?.csv`
do
#code to edit the doc*.csv files ie $file
#output is called temp_doc*.csv
done
for pairdoc in `ls $DIR/pair_doc?.csv`
do
#code to edit the piar_doc*.csv files ie $pairdoc
#output is called temp_pair*.csv
done
#still need to combine the files. I have the join written for a single iteration,
#but how do I loop the code to save each join as a different file corresponding
#to combined*.csv
ベストアンサー1
set -x
DIR=/path/to/file/location
TMPDIR=$(mktemp -d)
rm -f -- "$DIR/combined.csv"
for file in "$DIR"/doc?.csv
do
doc=${file##*/}
#------------ doc processing
temp_doc="$TMPDIR/$doc"
your_code "$file" > "$temp_doc"
#------------- pair doc processing
pair="$DIR/pair_$doc"
temp_pair="$TMPDIR/$pair"
your_code "$pair" > "$temp_pair"
#--------- combine doc+pair
combined="$DIR/combined${doc/doc/}"
your_code "$temp_doc" "$temp_pair" > "$combined"
cat "$combined" >> "$DIR/combined.csv"
done
注:上記の3つのステップの処理コードをあなたの処理コードに置き換えてください。
doc=${file##*/} 上記の構造で行うことは、シェル変数 $file で左から始まり、最後の/アスタリスクを削除するだけです。ヘッダーは$ DIRであることを忘れないでください。単純なデフォルト名を取り、結果を別のシェル変数 $doc に保存します。
すべてを1つのファイルにリンクするために最後のcat行を追加しました。