删除列csv中的数字

时间:2014-07-10 10:35:53

标签: bash csv

我有一个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

3 个答案:

答案 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