1

我有一个包含以下日期的文本文件,格式为dd/mm/yyyy

14/09/1992
15/04/1983
15/09/1961
02/06/1979
14/12/1971
08/02/2001
19/06/1999
14/09/1969
31/08/2002
30/07/1980
25/04/1973
03/01/1992

我想将其转换为YYYY/mm/dd脚本中的格式。我打算使用 date 命令这样做:

date -f tempDate +%Y/%m/%d

但问题是,它无法识别英式日期并显示以下错误,因为我相信它正在阅读它,因为mm/dd/yyyy我不希望它:

date: invalid date `14/09/1992'

还有另一种方法吗?或者有什么办法可以改变日期格式的顺序?

另外,我需要这个脚本在我不是系统管理员的服务器上工作。

4

5 回答 5

5

如果文件与描述的一样,为什么不使用以下内容反转列awk

$ awk 'BEGIN{FS=OFS="/"}{print $3,$2,$1}' file
1992/09/14
1983/04/15
1961/09/15
1979/06/02
1971/12/14
2001/02/08
1999/06/19
1969/09/14
2002/08/31
1980/07/30
1973/04/25
1992/01/03

编辑:

awk使用多个字段分隔符同样容易:

$ awk -F[/,] '{print $1","$2","$5"/"$4"/"$3}' <<< "name,number,14/09/1992"
name,number,1992/09/14
于 2013-01-14T16:54:55.627 回答
4

您可以使用快速 awk 脚本更改为年/月/日顺序:

 awk -F '/' '{print $3"/"$2"/"$1}' < file.txt
于 2013-01-14T16:54:14.593 回答
2

至少在 Mac OS X 上,-f迄今为止的选项记录为:

-f 使用 input_fmt 作为格式字符串来解析提供的 new_date 而不是使用默认 [[[mm]dd]HH]MM[[cc]yy][.ss]格式。解析是使用strptime(3).

因此,您应该使用:

date -f '%d/%m/%Y' +'%Y-%m-%d' ...

但是,剩余的问题是转换多个值;为此,您需要多次调用date,因此您想尝试以下操作:

# Bogus code
while read date                                   # Bogus code
do date -f '%d/%m/%Y' $date +'%Y-%m-%d'           # Bogus code
done < tempDate                                   # Bogus code
# Bogus code

但是,这会尝试设置系统时钟(除非您root当时设置了系统时钟,否则不会很成功,并且您不应该root在实验时设置)。因此,没有一种明显的方法可以让date命令执行您想要的操作。

因此,使用awksed、和正则表达式来映射日期的答案是可行的方法。perlpython

于 2013-01-14T17:04:42.693 回答
1

国际标准日期格式 ISO 8601 是YYYY-MM-DD,不是YYYY/MM/DD。我建议使用它,除非您有充分的理由不这样做。

美国和英国的日期格式对于每个月 13 日之前的日期是不明确的,因此date不会识别它也就不足为奇了。可能有一种方法可以告诉它给定的字符串是英国格式,但我不知道它是什么。

您可以使用sed或任何其他执行正则表达式替换的工具来更改格式:

$ echo 14/09/1992 | sed 's/\([0-9][0-9]\)\/\([0-9][0-9]\)\/\([0-9][0-9][0-9][0-9]\)/\3-\2-\1/'
1992-09-14

Perl 可以不那么冗长地做到这一点:

$ echo 14/09/1992 | perl -pe 's/(\d\d)\/(\d\d)\/(\d\d\d\d)/$3-$2-$1/'
1992-09-14

或者:

$ echo 14/09/1992 | perl -pe 's/(\d{2})\/(\d{2})\/(\d{4})/$3-$2-$1/'
1992-09-14
于 2013-01-14T16:50:02.550 回答
0

如果您使用的是 Windows,您还可以更改区域设置以更改整个计算机上的日期格式,特别是您的 .csv 文件:

赢7:

1./ 转到开始按钮 2./ 选择控制面板 3./ 时钟、语言和地区。4./更改日期、时间和数字格式。

于 2014-05-24T12:52:12.087 回答