내 스크립트의 경우 파일에서 데이터를 읽어야 합니다.
예를 들어, 2개의 파일이 있습니다. 하나는 텍스트 파일이고 두 번째는 10개의 열이 있는 csv 파일입니다.
내가 원하는 것은 csv를 읽고 첫 번째 파일의 매개변수를 변경하는 것입니다.
sed -n
한 번에 한 행씩 데이터를 읽고 저장하는 데 사용됩니다 .fileC
- 사용
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에서 얻은 값으로 바꾸고 파일을 /san00
CSV의 4열에 저장해야 합니다.
원하는 출력
The script name kkkkkk
The staments go here
job name = filetest
exit
이는 에 저장되어야 합니다 san00/project
.
답변1
file1
템플릿과 file2
CSV입니다. 두 행의 위치가 동일하고 정의되지 않은 경우 어떻게 되나요? 아래 솔루션은 위치 파일을 최신 데이터로 덮어씁니다. 해당 /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