헤더를 각 행을 변경하는 변수로 사용하는 CSV 파일을 갖고 싶지만 while read -r
각 행에서 For 루프를 실행하는 것과 같은 간단한 작업을 수행하고 싶습니다. 루프 동안 나는 각 항목이 특정 변수가 되기를 원합니다. 예를 들어 csr 파일을 생성합니다.
CSV는 다음과 같습니다.
server alias cn san environment
server1,srv1,srv1.domain.com,"dns:srv1.coolstuff.org,dns:srv1.morecoolstuff.org:,production
server2,srv2,srv2.domain.com,"dns:srv2.dev.coolstuff.org,dns:srv2.dev.morecoolstuff.org",development
잠깐만요... 다 지나갈 거예요
keytool -gen 어쩌구 저쩌구 항목의 각 줄을 사용합니다.
누구든지 아이디어가 있나요? 나는 고양이 가죽을 벗기는 방법이 8,000가지가 있다는 것을 알고 있습니다.
답변1
저는 보통 csvtool
bash 스크립트를 사용하여 CSV 파일을 처리합니다.
다음과 같이 해야 합니다.
csvtool namedcol server,alias,cn,san,environment input.csv \
| csvtool -u TAB drop 1 - \
| while IFS=$'\t' read -r server alias cn san environment; do
echo "server: ${server}"
echo "alias: ${alias}"
echo "cn: ${cn}"
echo "san: ${san}"
echo "environment: ${environment}"
# do something with it...
keytool -genkey -alias "${alias}" -keyalg RSA -keysize 2048
done
첫 번째 호출에서는 csvtool
열 순서가 고정되지 않은 경우 CSV 파일의 열을 이름별로 출력합니다.
두 번째 호출은 CSV 헤더를 제거하고 ,
입력 데이터에 탭이 아닌 쉼표가 포함될 수 있는 경우를 대비하여 일부 구분 기호를 수정합니다(대신 "\t" 사용).
그런 다음 envvar를 read
사용하여 IFS
호출 하고 read
변수 이름에 값을 할당하는 데 동일한 구분 기호를 사용합니다.