我需要bash awk命令的帮助。
我想要这个输出:
Aug 05 08:54:52 Installed: perl-XML-Simple-2.14-4.fc6.noarch
Aug 05 08:57:10 Installed: yum-utils-1.1.16-21.el5.centos.noarch
Aug 05 14:59:19 Installed: libgcc-4.1.2-55.el5.i386
Aug 05 14:59:19 Installed: libstdc++-4.1.2-55.el5.i386
我尝试过:cat /var/log/yum.log | awk '{ print $1, $2, $3 } print 'Aug 05''
但它不起作用。有人可以根据日期提供正确的命令帮助我吗?
谢谢。
答案 0 :(得分:2)
我认为您想要awk '/Aug 05/' /var/log/yum.log
或grep "Aug 05" /var/log/yum.log
(根据建议进行编辑)。好像您希望在8月5日时看到日志文件的整个行。 Awk默认会打印与模式匹配的任何行。
顺便说一下,您不必将文件添加到awk中。 Awk可以将文件名作为参数并对其进行处理。模式通常(总是?)跟随命令块。该模式由/
分隔,并且可以包含典型的正则表达式。
答案 1 :(得分:1)
正确的语法实际上是:
awk '/Aug 05/ { print $0 }' /var/log/yum.log
我将打印 $ 0 ,因为在您的示例中,您提到的字段仅会打印日期。
致谢!
答案 2 :(得分:0)
我将在具有yum / rpm的系统上执行以下操作:
#!/bin/bash
file=/tmp/file.dat
rpm -qa --qf '%{INSTALLTIME} (%{INSTALLTIME:date}): %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -n > $file
# Date Ranges
start="Apr 28 07:50:01 2015"
finish="Feb 10 10:00:10 2017"
# Print items between range
while IFS= read -r line ;do
curr=$(echo "$line" | awk '{print $1}')
if [ $curr -ge $(date -d "${start}" +"%s") ] && [ $curr -le $(date -d "${finish}" +"%s") ] ;then
echo $line
fi
done < "${file}"
[[ -f $file ]] && rm -f "${file}"