sedを使用してパラメータを渡す

sedを使用してパラメータを渡す

私のスクリプトでは、ファイルからデータを読み取る必要があります。

たとえば、2つのファイルがあります。 1つはテキストファイル、2番目は10列のcsvファイルです。

私が望むのはcsvを読み、最初のファイルのパラメータを変更することです。

  1. sed -n一度に1行ずつデータを読み書きするために使用されます。fileC
  2. 使用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から取得した値に置き換え、ファイルを/san00CSVの4列に保存する必要があります。

希望の出力

The script name kkkkkk

The staments go here

job name = filetest

exit

これはに保存する必要がありますsan00/project

ベストアンサー1

file1テンプレートとfile2CSV。 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つに過ぎず、データの性質によってはそれより複雑になる可能性があります。

おすすめ記事