CSVファイルのセルを読む

CSVファイルのセルを読む

この数値表をcsv次のファイル形式で保存しました。

5,  6,  9,  5,
2,  8,  1,  1, 
1,  2,  3,  6,
. . .  . .
. . .  . .
. . .  . .
. . .  . .

この表の各行は、長方形のサイズを説明しています。

次のように、コマンドラインに1行に4つの数字を入力して長方形を作成したいと思います。

rectang -cs x1 x2  x3 x4  # rectang is a script to create rectangle; -cs flag means dimensions; x1, x2, x3 x4 the rectangle dimensions 

table.csvcsvファイル""をタブ区切りのテキスト" table.txt"ファイルに変換し、次のようにforループで使用しようとしています。

for i in $(cat table.txt); do
rectang -cs x1 x2  x3 x4
done

しかし、テーブル内の「長方形」コマンドでx1 x2 x3 x4を提供する方法がわかりません。

助けてくれてありがとう。

答え1

このreadコマンドは、文字で区切られた複数の単語をキャプチャできます$IFS(デフォルト:スペース、タブ、改行)。

while read -r d1 d2 d3 d4; do
    rectang -cs "$d1" "$d2" "$d3" "$d4"
done < file.csv

変更されたデータ(カンマとスペースで区切られたフィールド)が与えられたら、次の操作を行います。

while IFS=",$IFS" read -r d1 d2 d3 d4; do # ...

フィールド区切り記号としてカンマを含めます。

答え2

ファイルが次の場合:

cat table.txt | while read i
do
    rectang -cs  $i
done

これは以下を呼び出します:

rectang -cs 5  6  9  5
rectang -cs 2  8  1  1 

など。

答え3

Glennの答えはもちろん非常に良いですが、この場合はそれを使ってawkコマンドラインを生成し、結果をシェルにパイプします。 POSIXの一部としてawk効果的なソリューションと言えます。

awk -F'[, ]+' '{print "rectang -cs", $1, $2, $3, $4}' table.csv | sh

または、最初のフィールドを最初のフィールドに割り当てて、フィールド区切り文字の再計算をトリガーします。

awk -F'[, ]+' '$1=$1{print "rectang -cs", $0}' table.csv | sh

または同様のパターンを使用します。

sed -e 's/^/rectang -cs /' -e 's/, */ /g' table.csv | sh

もちろん、実験するときはコマンドを見てくださいsh

関連情報