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
,然后再安装GNU
awk
。您还可以安装一个像样版本的
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
,而不是GNU
awk
。GNU
awk
为日期处理添加了一些功能强大的扩展(可能包括这些扩展)。不过,除非用户安装GNU
awk
,否则它在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)