linux - 在 AWK 中使用管道

标签 linux bash sed awk

在 AWK 中编写脚本 - 输入数据 - 格式为 31.12.2012 的时间。我想比较 2 个日期 - 系统日期和这个日期。我认为最好的方法是将两个日期都转换为 unix 时间戳,进行推导,然后与条件进行比较。只有这种格式的日期才能转换成 unix 时间戳 2012-12-31 。为了转换成这种格式,我编写了 SED 表达式 sed -n -e "s_\(..\)\(.\)\(..\)\(.\)\(....\)_\5-\3-\1_p"。然后我们必须使用命令 date --utc --date "2012-12-31"+%s 转换这个表达式。但是管道不想工作。

我在 AWK 中写道:


#/usr/bin/awk -f
BEGIN {
    FS=",";
}
{
    split($3, account, "/");
    gsub(/ $/, "", account[1]);
    split($4, products, "\\\\n");
    split($5, supports, "\\\\n");
    for (i in products) {
        gsub("\"", "", products[i]);
        gsub("\"", "", supports[i]);
        split(supports[i], timesupport, "\ > ");
        "date +%s" | getline dateVal;
        print timesupport[1] | sed -n -e "s_\(..\)\(.\)\(..\)\(.\)\(....\)_\5-\3-\1_p" | getline timeVal1 | date --utc --date "timeVal1" +%s | getline timeVal;
        x=dateVal - timeVal;
        if (supports[i] !~ /n\\\\a*/ && supports[i] !~ /n\/a*/ && $2 !~ /\NULL/)
            print $1","$2","timesupport[1]","account[1]"\","products[i]"\","$6;

    }
}

主线程在 12634588 后。谢谢!

最佳答案

为什么不使用内置时间函数:

(echo | awk '{ print systime() }'; date +%s)
1348915323                
1348915323

要将您提到的字符串转换为相同的格式,请使用 mktime:

{ 
  t = "31.12.2012"
  split(t, a, "\\.")
  ts = sprintf("%04d %02d %02d 00 00 00", a[3], a[2], a[1])
  print mktime(ts)
}

输出:

1356908400

关于linux - 在 AWK 中使用管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651543/

相关文章:

linux - linux 文件描述符限制如何工作?

Python字典吃掉了大量的内存

linux - 将匹配模式的第一个字母大写

c++ - 在angstrom上编译c/c++程序

bash - 以 sudo 运行 hadoop 命令

python - 使用线程模块时,Django 在完成测试后不退出

Linux Awk 代码帮助

sed - 正则表达式 - 可以替换匹配组的一部分吗?

sed - 如何只用sed替换一行中的最后一场比赛?

linux - 伪设备文件的重要性是什么?我应该在什么情况下使用它们?