我有一个文件:
2012-11-15 10:35:00 2012 11 15 10 22 00
2012-11-14 13:03:00 2012 11 14 13 03 00
2012-11-14 13:13:00 2012 11 14 13 13 00
2012-11-14 13:23:00 2012 11 14 13 23 00
此命令打印:
$ awk -F "\t" '{ system(" date -d \" "$1" \" +%s; date -d \" "$1" \" +%s ")}' file
1352972100
1352972100
1352894580
1352894580
1352895180
1352895180
1352895780
1352895780
我想在系统中打印():
1352972100 1352972100
1352894580 1352894580
1352895180 1352895180
1352895780 1352895780
有办法吗?
答案 0 :(得分:1)
使用GNU awk。目前还不清楚哪些字段真正得到了打印的时间戳,所以这里有一些使用输入文件的例子:
仅使用$ 1:
$ gawk '{s=mktime(gensub(/-/," ","g",$1" 0 0 0")); print s,s}' file
1352959200 1352959200
1352872800 1352872800
1352872800 1352872800
1352872800 1352872800
使用$ 1和$ 2:
$ gawk '{s=mktime(gensub(/[-:]/," ","g",$1" "$2)); print s,s}' file
1352997300 1352997300
1352919780 1352919780
1352920380 1352920380
1352920980 1352920980
使用$ 3开启:
$ gawk '{sub($1" "$2" ","");s=mktime($0); print s,s}' file
1352996520 1352996520
1352919780 1352919780
1352920380 1352920380
1352920980 1352920980
如果你没有gawk:
$ awk '{ ("date -d \" "$1" \" +%s") | getline s; print s,s}' file
1352959200 1352959200
1352872800 1352872800
1352872800 1352872800
1352872800 1352872800
编辑:更新了如何使用system()(不推荐):
获取此shell命令行:
$ printf "%s %s\n" $(date -d 2012/11/15 +%s) $(date -d 2012/11/15 +%s)
1352959200 1352959200
并从awk中的system()调用它:
$ awk '{system( "printf \"%s %s\n\" $(date -d " $1 " +%s) $(date -d " $1 " +%s)" )}' file
1352959200 1352959200
1352872800 1352872800
1352872800 1352872800
1352872800 1352872800
答案 1 :(得分:1)
awk -F "\t" '{ system(" echo $(date -d \" "$1" \" +%s; date -d \" "$1" \" +%s) ")}' file
这使用echo
命令将两个输出展平为一行。这不是一个好的解决方案,但它确实符合使用系统和产生答案的标准。您也可以使用此变体:
awk -F "\t" '{ system(" x=$(date -d \" "$1" \" +%s); echo $x $x ")}' file