如何使用shell脚本在csv输出中删除日期?

时间:2016-11-30 17:27:47

标签: bash ksh aix

我有几个csv提取,我试图修复日期,它们如下:

"Time Stamp","DBUID"
2016-11-25T08:28:33.000-8:00,"5tSSMImFjIkT0FpiO16LuA"

第一列始终是“时间戳”,我想将其转换为只保留日期“2016-11-25”并删除“T08:28:33.000-8:00”。

最终结果将是..

"Time Stamp","DBUID"
2016-11-25,"5tSSMImFjIkT0FpiO16LuA"

有很多日期不同的文件。

有没有办法在ksh中执行此操作?某些类型的每个循环遍历所有文件并替换长时间戳并只保留日期?

3 个答案:

答案 0 :(得分:0)

这是使用标准aix实用程序的一种解决方案,

awk -F, -v OFS=, 'NR>1{sub(/T.*$/,"",$1)}1' file > file.cln && mv file.cln file

<强>输出

"Time Stamp","DBUID"
2016-11-25,"5tSSMImFjIkT0FpiO16LuA"

(但我无法再访问aix环境,因此只能使用我的本地awk进行测试。)

NR>1跳过标题行,sub()仅限于第一个字段(直到第一个逗号)。对于1,尾随awk char是{print $0}的简写。

如果您的数据布局发生变化,并且您的数据中有额外的逗号,则可能需要修复。

IHTH

答案 1 :(得分:0)

使用sed:

$ sed '2,$s/T[^,]*//' file
"Time Stamp","DBUID"
2016-11-25,"5tSSMImFjIkT0FpiO16LuA"

工作原理:

2,$           # Skip header (first line) removing this will make a
              # replacement on the first line as well.
   s/T[^,]*// # Replace everything between T (inclusive) and , (exclusive)
              # `[^,]*' Matches everything but `,' zero or more times

答案 2 :(得分:0)

awk这是一个完美的工作,但与之前的答案不同,我建议使用substring函数。

awk -F, 'NR > 1{$1 = substr($1,1,10)} {print $0}' file.txt

解释

  

-F,:-F标志设置字段分隔符,在本例中为逗号

     

NR&gt; 1 :忽略第一行

     

$ 1 :指第一个字段

     

$ 1 = substr($ 1,1,10):将第一个字段设置为字段的前10个字符。在示例中,这是日期部分

     

打印$ 0 :这将打印整行