我有以下文件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"}'
我能错过什么?
答案 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
localtime
和strftime
打印时间,格式为%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