sed를 사용하여 매개변수 전달

sed를 사용하여 매개변수 전달

내 스크립트의 경우 파일에서 데이터를 읽어야 합니다.

예를 들어, 2개의 파일이 있습니다. 하나는 텍스트 파일이고 두 번째는 10개의 열이 있는 csv 파일입니다.

내가 원하는 것은 csv를 읽고 첫 번째 파일의 매개변수를 변경하는 것입니다.

  1. sed -n한 번에 한 행씩 데이터를 읽고 저장하는 데 사용됩니다 .fileC
  2. 사용sed "s/&replacefile1param/&readFileC/g"

내가 겪고 있는 문제는 두 번째 단계에서 cat매개변수로 읽는 것입니다. readFileC어떻게 해야 하나요?

첫 번째 파일은 내부에 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입니다. 두 행의 위치가 동일하고 정의되지 않은 경우 어떻게 되나요? 아래 솔루션은 위치 파일을 최신 데이터로 덮어씁니다. 해당 /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. 위의 방법은 그 중 하나일 뿐이며, 데이터의 성격에 따라 그보다 더 복잡할 수 있습니다.

답변2

이것은 당신에게 도움이 될 수 있습니다:

sed '1d;s|\([^,]*\),\([^,]*\),[^,]*,\([^,]*\).*|sed "1s/scriptname/\1/;5s/jobname/\2/" template >\3|' file.csv |
sh

관련 정보