我有一个data.csv,其列的值如下:
2014/07/08 21:30 UTC
我希望删除小时UTC并仅获取YYYYMMDD
20140708
时间,小时和分钟都可以改变,所以,我可以在21:30,22:00,22:30等等...
现在我使用以下代码,但我想使用正则表达式删除小时和时间......任何人都知道,我尝试了[0-9] * h UTC,但它没有运行..
awk -F "," '{gsub("/","",$1);gsub("22:30h UTC","",$1);gsub("22:00h UTC","",$1); print $1 "," $2"," $4"," $3}' data.csv
答案 0 :(得分:0)
date
救援:
$ date -d"2014/07/08 21:30 UTC" "+%Y%m%d"
20140708
请提供全文示例,说明如何更新所有内容。
例如,这是一种方法:
$ cat a
1,2014/07/08 21:30 UTC,3
$ awk 'BEGIN{FS=OFS=","} {cmd="date -d \""$2"\" \"+%Y%m%d\""; cmd | getline var; $2=var; print}' a
1,20140708,3
答案 1 :(得分:0)
你可以使用这个简单的awk命令,
$ echo '2014/07/08 21:30 UTC' | awk '{gsub(/\//,"",$1); print $1}'
20140708
另一个,
$ echo '2014/07/08 21:30 UTC' | awk '{gsub(/ .*$/,""); gsub("/",""); print}'
20140708
第一个gsub函数删除第一个空格中的所有字符到最后一个空格。第二个gsub函数仅从剩余部分中删除/
符号。
答案 2 :(得分:0)
我想使用正则表达式删除小时和时间......
假设使用awk
不是强制性的,您可能更喜欢使用sed
。鉴于输入集:
sh$ cat inputfile
DATE TIME, VAL1, VAL2
2014/07/08 21:30 UTC, xxxxxx, x1
2014/07/08 22:30 UTC, yyyyyy, y2
2014/07/08 23:30 UTC, zzzzzz, z3
2014/07/08 23:45 UTC, aaaaaa, a4
2014/07/08 23:55 UTC, bbbbbb, b5
以下替换将起到作用(这将不更改可能存在于数据文件中的标题行):
sh$ sed -r 's|^([0-9]{4})/([0-9]{2})/([0-9]{2}).*UTC|\1\2\3|' < inputfile
DATE TIME, VAL1, VAL2
20140708, xxxxxx, x1
20140708, yyyyyy, y2
20140708, zzzzzz, z3
20140708, aaaaaa, a4
20140708, bbbbbb, b5