この数値表を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.csv
csvファイル""をタブ区切りのテキスト" 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
。