CSV文件上的文本处理

时间:2015-06-26 08:20:16

标签: bash shell csv awk sed

我正在处理一个具有以下形式的文件:

"1999-01-04";1391.12;3034.53;66.515625;86.2;441.39
"1999-01-05";1404.86;3072.41;66.3125;86.17;440.63
"1999-01-06";1435.12;3156.59;66.4375;86.32;441

有时,有些值没有小数(例如441而不是441.0),我需要小数。如何编写一个脚本,以便添加所有整数.0以便它们成为浮点数?

2 个答案:

答案 0 :(得分:5)

使用sed

sed 's/\(;[^\.]*\)\(;\|$\)/\1.00\2/g' file

只是一个简单的替换正则表达式。

"1999-01-04";1391.12;3034.53;66.515625;86.2;441.39
"1999-01-05";1404.86;3072.41;66.3125;86.17;440.63
"1999-01-06";1435.12;3156.59;66.4375;86.32;441.00

答案 1 :(得分:2)

将此awk脚本另存为 awk.src

BEGIN {
  FS=";"
}
#
## MAIN Block
#
{
  printf $1; printf FS;
  for (i=2;i<=NF;i++) {
    if ($i !~ "\\.") {
      printf "%.1f", $i;
    }
    else { printf $i; }
    if (i!=NF) {
      printf FS;
    }
    else { printf "\n"; }
  }
}

试一试:

$ awk -f awk.src < sample.txt 
"1999-01-04";1391.12;3034.53;66.515625;86.2;441.39
"1999-01-05";1404.86;3072.41;66.3125;86.17;440.63
"1999-01-06";1435.12;3156.59;66.4375;86.32;441.0