读取csv文件中的单元格

读取csv文件中的单元格

我以文件格式保存了这个数字表,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。作为awkPOSIX 的一部分,它可以说是一个有效的解决方案。

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.

相关内容