Macos 如何用awk转换日期
我的文件Macos 如何用awk转换日期,macos,bash,date,awk,Macos,Bash,Date,Awk,我的文件temp.txt ID53,20150918,2015-09-19,,0,CENTER<br> ID54,20150911,2015-09-14,,0,CENTER<br> ID55,20150911,2015-09-14,,0,CENTER 试着喜欢这个 awk -F"," '{system("date -j -f ""%Y%m%d"" "$2" ""+%s""") | getline $2; print }' temp.txt 输出为: 144261947
temp.txt
ID53,20150918,2015-09-19,,0,CENTER<br>
ID54,20150911,2015-09-14,,0,CENTER<br>
ID55,20150911,2015-09-14,,0,CENTER
试着喜欢这个
awk -F"," '{system("date -j -f ""%Y%m%d"" "$2" ""+%s""") | getline $2; print }' temp.txt
输出为:
1442619474
sh: 0: command not found
ID53,20150918,2015-09-19,,0,CENTER
1442014674
ID54,20150911,2015-09-14,,0,CENTER
1442014674
ID55,20150911,2015-09-14,,0,CENTER
也无法使用gsub
awk -F"," '{gsub($2,"system("date -j -f ""%Y%m%d"" "$2" ""+%s""")",$2); print}' OFS="," temp.txt
awk: syntax error at source line 1
context is
{gsub($2,"system("date -j -f ""%Y%m%d"" "$2" >>> ""+% <<< s""")",$2); print}
awk: illegal statement at source line 1
extra )
这个GNU
awk
脚本应该可以。如果你的mac电脑上还没有安装,我建议先安装macport
,然后再安装GNUawk
。您还可以安装一个像样版本的bash
、date
和其他重要的实用程序,这些工具在OSX上的默认设置非常令人失望
BEGIN { FS = ","; OFS = FS; }
{
y = substr($2, 1, 4);
m = substr($2, 5, 2);
d = substr($2, 7, 2);
$2 = mktime(y " " m " " d " 00 00 00");
print;
}
将其放入一个文件(例如txt2ts.awk
)中,并使用以下方法处理您的文件:
$ awk -f txt2ts.awk data.txt
ID53,1442527200,2015-09-19,,0,CENTER<br>
ID54,1441922400,2015-09-14,,0,CENTER<br>
ID55,1441922400,2015-09-14,,0,CENTER
$awk-f txt2ts.awk data.txt
ID5314425272002015-09-19,0,中间
ID5414419224002015-09-14,0,中心
ID5514419224002015-09-14,0,中心
请注意,我们没有相同的时间戳。我让你们试着去理解它是从哪里来的,这是另一个问题
说明:substr(s,m,n)
返回从位置m
开始的s
的n
-字符子字符串(从1开始)mktime(“YYYY-MM-DD-HH-MM-SS”)
将日期字符串转换为时间戳(从纪元开始的秒数)FS
和OFS
分别是输入和输出字段分隔符。BEGIN
模式的花括号之间的命令仅在开始时执行,而其他命令则在文件的每一行上执行。您可以使用substr:
printf "%s-%s-%s", substr($6,0,4), substr($6,5,2), substr($6,7,2)
假设第6个字段是20150914,这将生成2015-09-14我想你的答案[这里][1]。[1] :@tstark81:唯一的问题是,这个标签的意思是Mac OS X,Mac OS X有BSD
awk
,而不是GNUawk
。GNUawk
为日期处理添加了一些功能强大的扩展(可能包括这些扩展)。不过,除非用户安装GNUawk
,否则它在Mac OS X上没有多大帮助。总之,我在Mac上使用了带有默认awk的日期。它的格式不适合您的情况,但可能会对您有所帮助。
$ awk -f txt2ts.awk data.txt
ID53,1442527200,2015-09-19,,0,CENTER<br>
ID54,1441922400,2015-09-14,,0,CENTER<br>
ID55,1441922400,2015-09-14,,0,CENTER
printf "%s-%s-%s", substr($6,0,4), substr($6,5,2), substr($6,7,2)