简体   繁体   English

在同一行中打印awk的两个匹配变量

[英]Print the two matched variables of awk in same line

This is the script which i wrote. 这是我写的脚本。

Date=$(date +'%Y-%m-%d')

for i in `awk -F"[.: ]" '/start/{start=($4 * 3600) + ($5 * 60) + $6;date=$4$5} /end/{print date;print (($4 * 3600) + ($5 * 60) + $6)-start;start=""}' logs.txt`;  do
    echo "$i"
done

The logs.txt consists of : logs.txt包含:

11.04.2018 09:21:35 aaaaa: start_time
11.04.2018 09:22:35 aaaaa: end_time
11.04.2018 10:45:00 aaaaa: start_time
11.04.2018 11:00:00 aaaaa: end_time

In this the expected output is : 在此预期的输出是:

2018-04-11 09:21:35,60
2018-04-11 10:45:00,900

But the output i am getting is : 但是我得到的输出是:

2018-04-13,0921
2018-04-13,60
2018-04-13,1045
2018-04-13,900

Can anyone rectify what is the error ? 谁能纠正这是什么错误?

In GNU awk: 在GNU awk中:

awk '
{
    split($1 " " $2,a,"[.: ]")                                  # split for mktime
    s=mktime(a[3] " " a[2] " " a[1] " " a[4] " " a[5] " " a[6]) # to secs
    if($4=="end_time")                                          # at end_time
        print strftime("%Y-%m-%d %H:%M:%S,",p) s-p              # print start time and difference
    p=s                                                         # set secs to prev
}' file
2018-04-11 09:21:35,60
2018-04-11 10:45:00,900

I thinks this problem should be separated multiple problems. 我认为这个问题应该分开多个问题。 How do you think about below code? 您如何看待以下代码?

# extract records: log file may contain other informations
awk '$4=="start_time";$4=="end_time"' logs.txt  |
# wrap records:
# # start_time and end_time may appear alternately in the log.
# # wrap a pair into 1 line.
awk '{if(NR%2==1){ printf("%s ",$0) }else{ print }}'    |
# and convert
# # tr command character wise editor, read ``man tr''.
tr '.:' ' ' |
# # make your favorite output
awk -v OFS="," '{
    print $3 "-" $2 "-" $1 " " $4 ":" $5 ":" $6,
    3600 * ($12-$4) + 60 * ($13-$5) + ($14-$6)
    }'

You can see what these code actually do by increment piped commands, as shown below: 您可以通过增量管道命令查看这些代码的实际作用,如下所示:

$ awk '$4=="start_time";$4=="end_time"' logs.txt
11.04.2018 09:21:35 aaaaa: start_time
11.04.2018 09:22:35 aaaaa: end_time
11.04.2018 10:45:00 aaaaa: start_time
11.04.2018 11:00:00 aaaaa: end_time
$ awk '$4=="start_time";$4=="end_time"' logs.txt    |
> awk '{if(NR%2==1){ printf("%s ",$0) }else{ print }}'
11.04.2018 09:21:35 aaaaa: start_time 11.04.2018 09:22:35 aaaaa: end_time
11.04.2018 10:45:00 aaaaa: start_time 11.04.2018 11:00:00 aaaaa: end_time
$ awk '$4=="start_time";$4=="end_time"' logs.txt    |
> awk '{if(NR%2==1){ printf("%s ",$0) }else{ print }}'  |
> tr '.:' ' '
11 04 2018 09 21 35 aaaaa  start_time 11 04 2018 09 22 35 aaaaa  end_time
11 04 2018 10 45 00 aaaaa  start_time 11 04 2018 11 00 00 aaaaa  end_time
$ awk '$4=="start_time";$4=="end_time"' logs.txt    |
> awk '{if(NR%2==1){ printf("%s ",$0) }else{ print }}'  |
> tr '.:' ' '   |
> awk -v OFS="," '{
>   print $3 "-" $2 "-" $1 " " $4 ":" $5 ":" $6,
>       3600 * ($12-$4) + 60 * ($13-$5) + ($14-$6)
>   }'
2018-04-11 09:21:35,60
2018-04-11 10:45:00,900

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM