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ファイルで最初の3つのエントリを呼び出すと、ループ内で1行ずつ実行する必要があることです。
答え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