簡體   English   中英

Bash修改CSV以更改字段

[英]Bash modify CSV to change a field

我有一個很大的CSV文件(大約10.000行和400列),我需要修改某些列(例如20140321132233 ),以將格式從20140321132233更改為2014-03-21 13:22:33 我需要修改的所有字段都是日期時間。

我看到了一些使用awk的示例,但進行了數學修改。 我可以使用類似的方法進行上述更改嗎?

file.csv示例:

19238328932|123233443|123|0|||||123123|20140321132233|1|0|0|....|20130211122143|...
12332312211|222321233|111|0|||||234432|20150222122354|1|0|0|....|20120112123133|...

請將以下awk腳本另存為awk.src

function date_str(val) {
  Y = substr(val,0,4);
  M = substr(val,5,2);
  D = substr(val,7,2);
  date = sprintf("%s-%s-%s",Y,M,D);
  return date;
}
function time_str(val) {
  h = substr(val,9,2);
  m = substr(val,11,2);
  s = substr(val,13,2);
  time = sprintf("%s:%s:%s",h,m,s);
  return time;
}

BEGIN {
  FS="|"
}
#
## MAIN Block
#
{
  for (i=1;i<=NF;i++) {
    if (i==10) {
      printf "%s %s", date_str($i), time_str($i);
    }
    else { printf $i; }
    if (i!=NF) {
      printf FS;
    }
    else { printf "\n"; }
  }
}

現在嘗試一下,它應該打印:

$ awk -f awk.src csv 
19238328932|123233443|123|0|||||123123|2014-03-21 13:22:33|1|0|0|....|20130211122143|...
12332312211|222321233|111|0|||||234432|2015-02-22 12:23:54|1|0|0|....|20120112123133|...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM