How to derive current date and time and append at the end of each line that contains 'Hello'

后端 未结 8 1603
谎友^
谎友^ 2021-02-07 04:08

I have the following file party.txt that contains something like the following:

Hello Jacky
Hello Peter
Bye Johnson
Hello Willy
Bye Johnny
Hello Mar         


        
相关标签:
8条回答
  • 2021-02-07 04:16

    gawk (and recent versions of mawk) have a built-in time/date function, so there is no need to use external tools there.

    gawk '/Hello/{print NR " - " $0 " - " strftime("%Y-%m-%d")}' party.txt
    
    0 讨论(0)
  • 2021-02-07 04:16

    This solution should work with any awk:

    awk '/Hello/ {cmd="(date +'%H:%M:%S')"; cmd | getline d; print d,$0; close(cmd)}' party.txt
    

    The magic happens in close(cmd) statement. It forces awk to execute cmd each time, so, date would be actual one each time.

    cmd | get line d reads output from cmd and saves it to d.

    0 讨论(0)
  • 2021-02-07 04:22
     awk 'BEGIN{"date +'%Y-%m-%d'"|getline d;}/Hello/{print $0,d}' file
    

    will give you:

    Hello Jacky  2012-09-11
    Hello Peter 2012-09-11
    Hello Willy 2012-09-11
    Hello Mary 2012-09-11
    Hello Wendy 2012-09-11
    
    0 讨论(0)
  • 2021-02-07 04:22

    If you're open to using Perl:

    perl -MPOSIX -lne 'if (/Hello/){ print "$_ " . strftime "%Y-%m-%d",localtime }' party.txt
    

    produces this output

    Hello Jacky 2015-10-01
    Hello Peter 2015-10-01
    Hello Willy 2015-10-01
    Hello Mary 2015-10-01
    Hello Wendy 2015-10-01
    

    Here's how it works:

    • -n loops around every line of the input file, do not automatically print each line

    • -l removes newlines before processing, and adds them back in afterwards

    • -e execute the perl code

    • $_ is the current line

    • -MPOSIX loads the POSIX module, which includes strftime

    • localtime and strftime prints the time, given the format %Y-%m-%d

    0 讨论(0)
  • 2021-02-07 04:23

    using posix sed (and a sub shell due to missing time function in sed)

    sed -n "/^Hello/ s/$/ $( date +'%Y-%m-%d' )/p" party.txt
    

    return

    Hello Jacky 2016-11-10
    Hello Peter 2016-11-10
    Hello Willy 2016-11-10
    Hello Mary 2016-11-10
    Hello Wendy 2016-11-10
    
    0 讨论(0)
  • 2021-02-07 04:30

    One way using awk:

    awk -v date="$(date +"%Y-%m-%d %r")" '/Hello/ { print $0, date}' party.txt
    

    Results:

    Hello Jacky 2012-09-11 07:55:51 PM
    Hello Peter 2012-09-11 07:55:51 PM
    Hello Willy 2012-09-11 07:55:51 PM
    Hello Mary 2012-09-11 07:55:51 PM
    Hello Wendy 2012-09-11 07:55:51 PM
    

    Note that the date value is only set when awk starts, so it will not change, even if the command takes a long time to run.

    0 讨论(0)
提交回复
热议问题