2017-02-24 9 views
-3

私はUNIXのファイルを検索していますが、問題は私の入力データがUTC形式です。私はESTにfirsを変換してフィルタを適用する必要があります。unix awk ?utcのタイムスタンプを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"' 
+0

POSIX awkまたはgawk? gawkは標準的な行であり、時間関数を持っています。 – dawg

+0

上記の問題を解決するもの(awk、gawkまたはperl) –

答えて

0

あなたはbashのソリューションの下に試すことができます - スクリプトの

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.txt出力を:

./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 
} 
+0

awk -Fをパイプストリームに適用することはできますか。パイプストリームの例に適用できますか?試してみましたが、それを理解できませんでした。例aws s3api list-objects - バケットバケット - プレフィックスフォルダ--query '内容[*] [Key、LastModified]' - 出力テキスト| grep -i filesearch | awk '$ 2FS> = "2017-02-21T11:09:41.000Z" && $ 2FS <= "2017-02-23T11:09:41.000Z"' | awk '{gsub( "T"、 ""、$ 2); gsub( "000"、 ""、$ 2); print(gsub( "Z"、 ""、$ 2); gsub( " - "、 "$ 2); gsub } '| awk '{a = $ 1; b = $ 2 "" $ 3; d = b-21600; c = b; print a、c、d} –

関連する問題