我以文件格式保存了这个数字表,csv
如下所示:
5, 6, 9, 5,
2, 8, 1, 1,
1, 2, 3, 6,
. . . . .
. . . . .
. . . . .
. . . . .
该表中的每一行描述了一个矩形的尺寸。
我想在命令行中输入每行的四个数字来创建矩形,如下所示:
rectang -cs x1 x2 x3 x4 # rectang is a script to create rectangle; -cs flag means dimensions; x1, x2, x3 x4 the rectangle dimensions
我正在考虑将 csv 文件“ table.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
ETC。
答案3
Glenn 的答案当然非常好,但在这种情况下,我会使用它awk
来生成命令行,然后将结果通过管道传输到 shell。作为awk
POSIX 的一部分,它可以说是一个有效的解决方案。
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
.