如何正确地循环这个BASH语句?

在我所做的这行代码上使用的最佳循环是什么,它通过一个日志文件并find在$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}' 

 $ 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 

如果你想使用awk:

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

不需要sed或cat。

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

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

我相信这是你正在寻找的。

而不是打印$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命令。)