Linux下使用awk如何获取关键字所在字段号,第几列,以及打印这个字段之后的所有字段?

发布于 2022-09-06 15:10:51 字数 1333 浏览 14 评论 0

netstat 的原始结果如下:

[root@Test tmp]# netstat -tunp| grep 'ESTABLISHED'
tcp        0      0 10.251.101.163:6379         10.251.101.163:51602        ESTABLISHED 2115/redis-server 1
tcp        0      0 127.0.0.1:58657             127.0.0.1:3306              ESTABLISHED 13354/rpc_time_serv
tcp        0      0 10.251.101.163:52409        10.251.101.163:6379         ESTABLISHED 611/./SendMsgServer
tcp        0      0 127.0.0.1:54957             127.0.0.1:12000             ESTABLISHED 19186/php-fpm
tcp        0      0 10.251.101.163:6379         10.251.101.163:49821        ESTABLISHED 2115/redis-server 1
tcp        0      0 127.0.0.1:12000             127.0.0.1:45060             ESTABLISHED 1810/memcached

我想用awk处理输出结果为:

10.251.101.163:6379     ESTABLISHED    2115/redis-server 1
127.0.0.1:58657         ESTABLISHED    13354/rpc_time_serv
10.251.101.163:52409    ESTABLISHED    611/./SendMsgServer
127.0.0.1:54957         ESTABLISHED    19186/php-fpm
10.251.101.163:6379     ESTABLISHED    2115/redis-server 1
127.0.0.1:12000         ESTABLISHED    1810/memcached

以空格符为分隔符,因为每一行的字段数(列数)不一致,'ESTABLISHED'之后需要打印的字段数就不一样了。请问应该如何实现呢?
另外如果用固定字符位数的方式来输出应该是可以简单达到效果,但是为了泛用,不想以这种方式处理。
目前的想法是,获取'ESTABLISHED'所在的字段数,然后把该字段之后的字段打印,但是对awk不是很熟悉,不知道代码具体怎么写。
望高人指点...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空心空情空意 2022-09-13 15:10:51
netstat -tunp| grep 'ESTABLISHED'| awk '{printf $4"    ";for(i=5;i<=NF;i++)if($i ~ /ESTABLISHED/)num=i;for(i=num;i<=NF;i++)printf $i"    ";printf"\n" }'

问了以前的同事,得到了在 awk 中 if 判断和 for 循环的简单写法,已经解决我的问题,前来自答。
其中涉及到的 awk 用法有:if 判断一个关键字所在列为第几列,用变量 num 保存字段号(列号);awk 中 for 循环的写法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文