【发布时间】:2020-05-01 07:49:45
【问题描述】:
对于 csv 文件显示为:
variables = cl, cd, clp, clv, cdp, cdv, ...
-0.00000002, 0.01023266, -0.00000002, 0.00000000, 0.00985099, 0.00038167, ...
-0.00000000, 0.01023305, -0.00000000, 0.00000000, 0.00985080, 0.00038225,
-0.00000002, 0.01023390, -0.00000002, 0.00000000, 0.00985075, 0.00038315,
0.00000002, 0.01023482, 0.00000002, 0.00000000, 0.00985070, 0.00038412,
-0.00000004, 0.01023574, -0.00000004, 0.00000000, 0.00985065, 0.00038509,
...
我有一个简短的脚本来从 csv 文件中读取值,但实际上它会返回整个列。我需要它为每个变量分配一个值。
export IFS=","
cat file.csv | while read a b c d e f; do echo "$b; done
这会返回:
cd
0.01023266
0.01023305
0.01023390
0.01023482
0.01023574
如何让这个命令只返回:
0.01023482
编辑: 以下行应该从我的文件中返回一个值:
row=4
col=2
str=$(awk 'BEGIN{FS=OFS=","} FNR==$row' history.out | awk '{print substr($col, 1, length($col)-1)}')
echo $str
当我使用 $4 而不是 $row 时它可以工作。最后的解决办法是什么?实际上,$str 返回为空。
提前致谢。
【问题讨论】:
-
总是建议添加输入文件的样本,所以请务必将其添加到您的帖子中,然后让我们知道。
-
返回该行的标准是什么?它在文件中的位置,还是在一列或另一列中的值?
-
bash仅在您的 CSV 文件在字段中没有任何类型的转义逗号时才适用(并且几乎没有)。如果您有像a,"b,c",d这样的行,那么bash并不能真正认识到它有3 列,而不是4 列。 -
请在您的问题中添加您的 file.csv 示例和示例输出,并告知我们。