如何导出当前日期和时间并附加到包含“Hello”的每一行的末尾

时间:2012-09-11 09:48:05

标签: date awk grep

我有以下文件party.txt,其中包含以下内容:

Hello Jacky
Hello Peter
Bye Johnson
Hello Willy
Bye Johnny
Hello Mary
Hello Wendy

我使用grep hello来捕获包含但是当我使用print date +"%Y-%m-%d'并附加到它时,我不能,而且每行会得到很多0

cat party.txt | grep Hello | awk '{ print date +"%Y-%m-%d"}'

我能错过什么?

8 个答案:

答案 0 :(得分:38)

gawk(以及最新版本的mawk)有一个内置的time/date function,所以不需要在那里使用外部工具。

gawk '/Hello/{print NR " - " $0 " - " strftime("%Y-%m-%d")}' party.txt

答案 1 :(得分:25)

使用awk的一种方式:

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

结果:

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

答案 2 :(得分:3)

 awk 'BEGIN{"date +'%Y-%m-%d'"|getline d;}/Hello/{print $0,d}' file

会给你:

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

答案 3 :(得分:3)

此解决方案适用于任何awk:

{{ asset('storage/path/to/file.png') }}

魔术发生在awk '/Hello/ {cmd="(date +'%H:%M:%S')"; cmd | getline d; print d,$0; close(cmd)}' party.txt 声明中。它强制close(cmd)每次执行awk,因此,每次都是实际的日期。

cmd读取cmd | get line d的输出并将其保存到cmd

答案 4 :(得分:2)

要回答直接问题,你错过的是date是一个外部命令,因此你需要在awk之外调用它并将其作为变量传递(作为其中之一)其他答案演示),或者使用system()内置函数或管道(作为另一个其他答案演示),在awk中作为系统命令调用它。

您看到0的原因是因为表达式date +"%Y-%m-%d"被解释为添加变量date的数字值(0为&{39} ; s未定义)到字符串"%Y-%m-%d"的数值(由0为{{1}},因为它不是有效数字。)

答案 5 :(得分:0)

如果你打开使用Perl:

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

产生此输出

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

以下是它的工作原理:

  • -n遍历输入文件的每一行,不自动打印每一行

  • -l在处理之前删除换行符,然后将其添加回来

  • -e执行perl代码

  • $_是当前行

  • -MPOSIX加载POSIX模块,其中包含strftime

  • localtimestrftime打印时间,格式为%Y-%m-%d

答案 6 :(得分:0)

使用posix sed(由于sed中缺少时间函数而导致子shell)

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

返回

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

答案 7 :(得分:0)

仅在gawk中:

$ gawk '/Hello/ {print $0, strftime("%Y-%m-%d");}' party.txt 
Hello Jacky 2019-09-17 
Hello Peter 2019-09-17 
Hello Willy 2019-09-17 
Hello Mary 2019-09-17 
Hello Wendy 2019-09-17