首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用awk命令打印模式匹配行,以及我需要打印另一个模式匹配的下一行

如何使用awk命令打印模式匹配行,以及我需要打印另一个模式匹配的下一行
EN

Stack Overflow用户
提问于 2015-02-11 17:58:17
回答 2查看 61关注 0票数 0

我的文件是这样的:

代码语言:javascript
运行
复制
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Received client request: List database locks (from user [usernme@mailid.com)
Connected from [::ffff:161.179.221.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]

当搜索设置申请时,必须打印设置申请,如果下一行有ip地址,则必须打印下一行Connected from [::ffff:161.179.445.43],否则只能打印设置申请行。

我的输出如下:

代码语言:javascript
运行
复制
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]

请帮我写一下这个的unix代码

EN

回答 2

Stack Overflow用户

发布于 2015-02-11 21:38:44

我会用sed来做这件事。请考虑以下几点:

代码语言:javascript
运行
复制
 [ test $] cat test.in                                                      
Setting application AAA active for user [usernme@mailid.com]                
Connected from [::ffff:161.179.445.43]
Received client request: List database locks (from user [usernme@mailid.com)
Connected from [::ffff:161.179.221.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.44]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.45]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.46]
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Received client request: List database locks (from user [usernme@mailid.com)
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.47]


 [ test $]
 [ test $]

以下sed程序:

代码语言:javascript
运行
复制
 [ test $] cat test.sed
#!/bin/sed  -nf

/Setting application/{
         N;
         /ffff:[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/{p;d};
         /\nSetting application/!{
                      s|\n.*||;p;d;
        }
        P;D
}

输出如下:

代码语言:javascript
运行
复制
 [ test $] ./test.sed test.in
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.43]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.44]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.45]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.46]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Setting application AAA active for user [usernme@mailid.com]
Connected from [::ffff:161.179.445.47]
 [ test $]

如果你想要一个解释,或者这不是你想要的,请回帖。请不要忘记给答案打分。

顺便说一句,我在centos 6上运行这个:

代码语言:javascript
运行
复制
[ test $] sed --version
GNU sed version 4.2.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-gnu-utils@gnu.org>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
 [ test $]

编辑:

代码语言:javascript
运行
复制
#!/bin/sed  -nf

/Setting application/{ # match this string
         N; # pull in the next line
         /ffff:[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/{p;d}; # if it contains an ip address print and restart processing
         /\nSetting application/!{ 
                # otherwise check it doesn't contain this text
                      s|\n.*||;p;d;# if not, remove the 2nd line, print and restart processing
        }
        P;D # else print then delete only the first part, then restart processing on the next line.
}
票数 0
EN

Stack Overflow用户

发布于 2015-02-11 22:40:44

代码语言:javascript
运行
复制
awk '/Setting application/{print; k=1; next}; k && /Connected from/; {k=0}' input-file

或者,稍微优雅一点:

代码语言:javascript
运行
复制
awk 'k && /Connected from/; k=/Setting application/' input-file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28451339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档