【问题标题】:Read value from csv从 csv 读取值
【发布时间】: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 示例和示例输出,并告知我们。

标签: bash shell parsing awk


【解决方案1】:

编辑:由于 OP 现在已经展示了示例,所以现在按照它添加解决方案。

row=4
col=2
awk -v R="$row" -v C="$col" 'BEGIN{FS=","} FNR==R{print $C}'  Input_file

FS="," 更改为FS=", ",以防逗号分隔符中也有空格。



这可以在awk 中轻松完成。

awk 'BEGIN{FS=OFS=","} FNR==4' Input_file

【讨论】:

  • @BrendanMcBreen,请用示例编辑您的帖子,然后让我知道?
  • 一旦显示数据格式,@RavinderSingh13 将能够显示使用awk 的简单命令替换如何将您想要的数据列和行保存到变量中。但是,格式很重要。分隔符周围的空格?等等...
  • @BrendanMcBreen,您能否检查一下我的 EDIT 解决方案,让我知道这是否对您有帮助?
  • Ravinder,它完美无瑕。你是神。感谢您的帮助。
  • @BrendanMcBreen,这是全能的恩典,我也是像你一样的普通人,干杯并继续分享,在这个伟大的网站上学习,干杯。
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2018-05-13
  • 2019-04-17
  • 1970-01-01
相关资源
最近更新 更多