【问题标题】:modify value's in CSV with bash-script使用 bash 脚本修改 CSV 中的值
【发布时间】:2012-07-16 09:23:36
【问题描述】:

我有以下 CSV 文件:

2012-07-12 15:30:09; 353.2
2012-07-12 15:45:08; 347.4
2012-07-12 16:00:08; 197.6
2012-07-12 16:15:08; 308.2
2012-07-12 16:30:09; 352.6

我要做的是修改第二列中的值...

我已经可以做的是提取值并以这种方式修改它:

#!/bin/bash
cut -d ";" -f2 $1 > .tmp.csv
for num in $(cat .tmp.csv)
    do
        (echo "scale=2;$num/5" | bc -l >> .tmp2.csv)
done
rm .tmp.csv
rm .tmp2.csv

但我也需要在该文件中有 column1...

希望你们能给我一个提示,我只是卡住了!

【问题讨论】:

  • 我花了太多时间尝试做这样的事情。如果你的系统上有 python,我建议你尝试一下。
  • 我绝对没有 py 经验,但也许可以用类似的例子解决它......
  • 使用 awk 可能是最简单的,但您需要更具体地说明您想要做什么。
  • 嗨,Kevin,我会将第二列中的值除以 5 并将其写回 csv

标签: bash csv sh bc


【解决方案1】:

试试awk:

awk '
    BEGIN {
        ## Split fields with ";".
        FS = OFS = "; "
    }

    {
        $2 = sprintf( "%.2f", $2/5 )
        print $0
    }
' infile

输出:

2012-07-12 15:30:09; 70.64
2012-07-12 15:45:08; 69.48
2012-07-12 16:00:08; 39.52
2012-07-12 16:15:08; 61.64
2012-07-12 16:30:09; 70.52

【讨论】:

  • 非常感谢,你成就了我的一天!
【解决方案2】:

从你的代码来看,这是我理解的

输入

2012-07-12 15:30:09; 353.2 
2012-07-12 15:45:08; 347.4 
2012-07-12 16:00:08; 197.6 
2012-07-12 16:15:08; 308.2 
2012-07-12 16:30:09; 352.6 

Awk 代码

awk -F ";" '{打印 $1 ";" $2/5}' 输入

输出

2012-07-12 15:30:09;70.64
2012-07-12 15:45:08;69.48
2012-07-12 16:00:08;39.52
2012-07-12 16:15:08;61.64
2012-07-12 16:30:09;70.52

【讨论】:

    【解决方案3】:

    一种方式,使用awk

    awk '{ $NF = $NF/5 }1' file.txt
    

    结果:

    2012-07-12 15:30:09; 70.64
    2012-07-12 15:45:08; 69.48
    2012-07-12 16:00:08; 39.52
    2012-07-12 16:15:08; 61.64
    2012-07-12 16:30:09; 70.52
    

    HTH

    【讨论】:

      【解决方案4】:

      这是一个几乎纯粹的 bash 解决方案,没有临时文件:

      #!/bin/bash
      
      while IFS=$';' read col1 col2; do
          echo "$col1; $(echo "scale=2;$col2/5" | bc -l)"
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多