csv 파일을 파싱해서 변수에 값을 저장해야 합니다. 아래는 샘플 csv 파일입니다.
아래는 ./script.sh입니다.
#!/bin/bash
D="";
P="";
./xyz --project "$P" --displayname "$D"
예를 들어 첫 번째 줄을 고려해 보면 다음과 같습니다.
내가 스크립트를 실행할 때
./script.sh /home/project.csv
10V nmos and pmos for MA
into $D
및 10v_nmos_and_pmos_for_ma
into 값을 저장해야 합니다 $P
.
이것이 어떻게 달성될 수 있습니까?
또 다른 시나리오는 csv 파일에서 처음 세 항목을 호출하면 루프에서 한 줄씩 실행되어야 한다는 것입니다.
답변1
bash
CSV 구문 분석에 대한 기본 지원은 없습니다. CSV 구문 분석을 지원하는 방법을 사용할 수 있습니다 (적어도 텍스트가 ksh93
큰따옴표 안에 입력되는 일부 형식의 CSV)."
""
read -S
#! /bin/ksh93 -
while IFS=, read -rSu3 P D ignore; do
./xyz --project "$P" --displayname "${D#*.}"
done 3< file.csv
또는 csv의 정확한 형식에 맞게 조정할 수 있는 적절한 CSV 구문 분석 라이브러리와 함께 perl
/를 사용하세요. python
예 perl
:
perl -C -MText::CSV -e '
$c = Text::CSV->new;
while (($p, $d) = @{$c->getline(STDIN)}) {
$d =~ s/.*?\.//;
system "./xyz", "--project", $p, "--displayname", $d;
}' < file.csv
POSIX 셸(예: )을 사용하여 CSV 필드의 내용에 큰따옴표, 쉼표 또는 줄 바꿈이 포함되지 않도록 보장할 수 있는 경우 bash
다음을 수행할 수 있습니다.
tr -d \" < file.csv | while IFS=, read -r p d ignore; do
./xyz --project "$p" --displayname "${d#*.}"
done
답변2
,
이는 ' ' 및 ' ' 문자가 CSV에서 매우 안정적으로 나타난다 고 가정합니다..
#!/bin/bash
cat "$1" | while IFS='' read -r line; do
D="$(echo "$line" | cut -d ',' -f 1 | tr -d '"')"
P="$(echo "$line" | cut -d '.' -f 2)"
echo 'D: '"$D"
echo 'P: '"$P"
./xyz --project "$P" --displayname "$D"
done