我有几个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中执行此操作?某些类型的每个循环遍历所有文件并替换长时间戳并只保留日期?
答案 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 :这将打印整行