有一个小的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
}
}
答案 0 :(得分:1)
您的问题是,当您的程序选择OK时,日志文件将为输入文件的每一行执行块{},而您没有输入文件,因此它默认为标准输入。我自己也不太熟悉awk所以我不知道如何在awk脚本中更改输入(如果可能),所以我会:
#! /bin/awk -f
BEGIN{
# find the newest file
command = "ls -1rt | tail -1 "
command | getline logfile
close(command)
while((getline<logfile)>0){
getline<logfile
# do the magic
print $0
}
}
或者
alias myprog.awk="awk '{print $0}' `ls -1rt | tail -1`"
同样,这可能有点脏。我们会等待更好的答案。 : - )
答案 1 :(得分:0)
永远不要解析ls
。请参阅this了解原因。
为什么需要使用getline?让awk
为您完成工作。
#!/bin/bash
# get the newest file
files=(*) newest=${f[0]}
for f in "${files[@]}"; do
if [[ $f -nt $newest ]]; then
newest=$f
fi
done
# process it with awk
awk '{
# do the magic
print $0
}' $newest