linux - 在unix awk中将utc时间戳转换为est

标签 linux bash unix awk

我正在unix中搜索一系列文件,但问题是我的输入数据采用UTC格式,我必须先将其转换为EST,然后应用过滤器,unix awk中有没有办法?

awk '$2FS >="2017-02-21T11:09:41.000Z" && $2FS <="2017-02-23T11:09:41.000Z"'

有没有足够简单的事情,如下所示:

awk 'convert_to_date($2FS,'EST') >="2017-02-21T11:09:41.000Z"
&& convert_to_date($2FS,'EST') <="2017-02-23T11:09:41.000Z"'

最佳答案

您可以尝试以下 bash 解决方案 -

猫时间.txt

1 2017-02-22T11:09:41.000Z
2 2017-02-23T11:09:41.000Z
3 2017-02-24T11:09:41.000Z
4 2017-02-25T11:09:41.000Z
5 2017-02-26T11:09:41.000Z



    cat ./time.sh
#!/bin/bash
d="2017-02-21T11:09:41.000Z"
b="2017-02-23T11:09:41.000Z"
USERTIME1=`awk -F'[T]|[-]|[:]|[.]' '{datetime=mktime($1 " "$2 " " $3 " " $4 " " $5 " " $6); print datetime}' <<< $d`
USERTIME2=`awk -F'[T]|[-]|[:]|[.]' '{datetime=mktime($1 " "$2 " " $3 " " $4 " " $5 " " $6); print datetime}' <<< $b`
for i in `cat time.txt|awk '{print $2}'`
do
var=`awk 'BEGIN{FS="[T]|[-]|[:]|[.]"} {print mktime($1 " "$2 " " $3 " " $4 " " $5 " " $6)}' <<< $i`
var1=`expr $var - 21600`
if [ $var1 -ge $USERTIME1 ] && [ $var1 -le $USERTIME2 ]
then
echo "$i"
fi
done

脚本输出:

./time.sh
2017-02-22T11:09:41.000Z
2017-02-23T11:09:41.000Z

我试图仅使用 awk 来解决这个问题,但没有成功,如果有人可以提供帮助的话。这是代码 -

### 1:11 AM Friday, Eastern Time (ET) is
### 6:11 AM Friday, Coordinated Universal Time (UTC)
### UTC to EST is 6 hour of difference means (-21600)
BEGIN{FS="[T]|[-]|[:]|[.]";d="2017-02-25T11:09:41.000Z";b="2017-02-23T11:09:41.000Z"}
{
USERTIME1=(substr(d,0,4) " " substr(d,6,2) " "substr(d,9,2) " " substr(d,12,2) " " substr(d,15,2) " "substr(d,18,2) " " substr(d,21,2))
USERTIME2=(substr(b,0,4) " " substr(b,6,2) " "substr(b,9,2) " " substr(b,12,2) " " substr(b,15,2) " "substr(b,18,2) " " substr(b,21,2))
UTCTIME=($1 " "$2 " " $3 " " $4 " " $5 " " $6)
ESTTIME=(UTCTIME-21600)
if((mktime(ESTTIME) >= mktime(USERTIME1)) && mktime((ESTTIME) <= mktime(USERTIME2))
print
}

关于linux - 在unix awk中将utc时间戳转换为est,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42429250/

相关文章:

windows - 使用套接字连接 linux 服务器和 windows 客户端时出现问题

bash - 如何为systemd服务的进程加载环境变量?

bash - 为组中的进程抑制 SIGINT

unix - 无法从另一台计算机访问 Unix 上的 Tomcat

unix - 自 1970 年 1 月 1 日以来的秒数 00 :00:00 GMT Erlang

c - pthread_create 中的多个参数

linux - 在 awk 命令中使用 '\n' 作为字段分隔符

linux - 超慢/usr/bin/env 调用

c - 编写简单的 GUI 应用程序?几个注意事项

java - 从 Java 代码运行 .sh