私のスクリプトでは、ファイルからデータを読み取る必要があります。
たとえば、2つのファイルがあります。 1つはテキストファイル、2番目は10列のcsvファイルです。
私が望むのはcsvを読み、最初のファイルのパラメータを変更することです。
sed -n
一度に1行ずつデータを読み書きするために使用されます。fileC
- 使用
sed "s/&replacefile1param/&readFileC/g"
私が経験している問題は、2番目のステップでcat
パラメータとして読むことです。readFileC
どうすればいいですか?
最初のファイルは、内部に2つのパラメータを含むサンプルスクリプトファイルです。 2番目のファイルは、200行と6列のCSVファイルです。
CSVの列を読み、パラメータを変更してテンプレートファイルを変更する必要があります。結果は200個のファイル1でなければならず、各結果はCSVの4列目に指定された場所に保存する必要があります。
サンプルテンプレートファイル
The name =scriptname
The staments go here
job name = jobname
exit
サンプルCSVデータ
scriptname,jobname,date,location,updated,env
kkkkkk,filetest,2001-01-01,/san00/project,test
kkkkk2,filetest2,2001-01-01,/san00/project,test
kkkkk3,filetest3,2001-01-01,/san00/project2,real
テンプレートファイルのパラメータをCSVから取得した値に置き換え、ファイルを/san00
CSVの4列に保存する必要があります。
希望の出力
The script name kkkkkk
The staments go here
job name = filetest
exit
これはに保存する必要がありますsan00/project
。
ベストアンサー1
file1
テンプレートとfile2
CSV。 2行の位置が同じで定義されていない場合はどうなりますか?以下の解決策は、場所ファイルを最新のデータで上書きします。その/san00
ディレクトリが場所セクションで使用される唯一のディレクトリであるか、絶対パスである必要があるのかは不明です。
ソリューションは現在のディレクトリに基づいて場所を作成します(および.
注)。.$dir
.$location
while IFS=, read scriptname jobname date location updated env; do
dir=$(dirname $location)
[ -d .$dir ] || mkdir -p ".$dir"
sed -e "s/scriptname/$scriptname/" \
-e "s/jobname/$jobname/" file1 > ".$location"
done < <(tail -n +2 file2)
場所に絶対パスを使用するソリューション、ターゲットディレクトリが事前に存在する必要があります
while IFS=, read scriptname jobname date location updated env; do
sed -e "s/scriptname/$scriptname/" \
-e "s/jobname/$jobname/" file1 > "$location"
done < <(tail -n +2 file2)
情報を抽出する方法はいくつかありますfile2
。上記の方法はそのうちの1つに過ぎず、データの性質によってはそれより複雑になる可能性があります。