选择最新的文件并使用 getline 读取它
遇到一个小 awk 脚本的问题,我尝试选择最新的一些日志文件,然后使用 getline 来读取它。 问题是,如果我不先向脚本发送任何输入,它就不起作用。
这行得通
echo | myprog.awk
不行
myprog.awk
,但myprog.awk
BEGIN{
#find the newest file
command="ls -alrt | tail -1 | cut -c59-100"
command | getline logfile
close(command)
}
{
while((getline<logfile)>0){
#do the magic
print $0
}
}
Having problems with a small awk script, Im trying to choose the newest of some log files and then use getline to read it. The problem is that it dosent work if I dont send it any input first to the script.
This works
echo | myprog.awk
this do not
myprog.awk
myprog.awk
BEGIN{
#find the newest file
command="ls -alrt | tail -1 | cut -c59-100"
command | getline logfile
close(command)
}
{
while((getline<logfile)>0){
#do the magic
print $0
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的问题是,当您的程序选择“确定”日志文件时,将针对输入文件的每一行执行块 {},并且您没有输入文件,因此它默认为标准输入。 我自己不太了解 awk,所以我不知道如何从 awk 脚本中更改输入(如果可能的话),所以我会:
或者也许
再次,这可能有点脏。 我们将等待更好的答案。 :-)
Your problem is that while your program selects OK the logfile the block {} is to be executed for every line of the input file and you have not input file so it defaults to standard input. I don't know awk very well myself so I don't know how to change the input (if possible) from within an awk script, so I would:
or maybe
Again, this maybe a little dirty. We'll wait for a better answer. :-)
永远不要解析
ls
。 请参阅此了解原因。为什么需要使用getline? 让
awk
为您完成这项工作。Never parse
ls
. See this for the reason.Why do you need to use getline? Let
awk
do the work for you.