3

在我制作的这行代码上使用的最佳循环是什么,它通过日志文件并找到失败的行$6?对 BASH 和 LINUX 来说非常新鲜,无法让任何循环正常工作。

Sep 13 12:09:39 icarus sshd[14043]: Failed none for invalid user 55659
Sep 13 12:09:43 icarus sshd[14043]: pam_unix(sshd:auth): check pass; user unknown
Sep 13 12:09:43 icarus sshd[14043]: pam_unix(sshd:auth):
Sep 13 12:09:44 icarus sshd[14043]: Failed password for invalid user 55659
Sep 13 12:09:48 icarus sshd[14043]: pam_unix(sshd:auth): check pass; user unknown
Sep 13 12:09:50 icarus sshd[14043]: Failed password for invalid user 55659 from

示例命令

cat auth.log | sed -e 's/,//g' | awk -F" " '{print $6}'
4

4 回答 4

1
$ grep Failed auth.log
Sep 13 12:09:39 icarus sshd[14043]: Failed none for invalid user 55659
Sep 13 12:09:44 icarus sshd[14043]: Failed password for invalid user 55659
Sep 13 12:09:50 icarus sshd[14043]: Failed password for invalid user 55659 from
于 2013-02-13T06:06:36.463 回答
0

如果你想使用 awk:

awk -F" " -e '/Failed/ {print $0}' auth.log

不需要 sed 或 cat。

于 2013-02-13T06:07:17.730 回答
0

这会查找包含“失败”(区分大小写)的行并简单地打印它们,

awk '/Failed/ {print $0}' auth.log

我相信这就是你要找的。

于 2013-02-13T06:16:33.893 回答
0

而不是打印$6,只打印$6 匹配“失败”的行:

你有过

cat auth.log | sed -e 's/,//g' | awk -F" " '{print $6}'

您可以使用

sed -e 's/,//g' auth.log | awk '$6=="Failed"'

(正如其他人指出的那样,sed可以将文件名作为参数,awk默认情况下会在空格处中断,因此无需指定-F参数。)

(您的示例输入没有逗号,因此您甚至可能不需要该sed命令。)

于 2013-02-13T13:23:03.313 回答