csvファイルを解析し、変数に保存する必要があります。

csvファイルを解析し、変数に保存する必要があります。

csvファイルを解析して変数に値を保存する必要があります。以下はサンプルのcsvファイルです。

サンプルCSVファイル

以下は./script.shです。

#!/bin/bash

D="";

P="";

./xyz --project "$P" --displayname "$D"

たとえば、最初の行を考えると、次のようになります。

私がスクリプトを実行すると

./script.sh /home/project.csv

10V nmos and pmos for MAinto$D10v_nmos_and_pmos_for_maintoの値を保存する必要があります$P

これはどのように達成できますか?

別のシナリオは、csvファイルで最初の3つのエントリを呼び出すと、ループ内で1行ずつ実行する必要があることです。

答え1

bashCSV解析の基本的なサポートはありません。 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/を使用してください。pythonperl:

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

関連情報