首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式化文本输出( Bash )

格式化文本输出( Bash )
EN

Stack Overflow用户
提问于 2016-11-03 15:18:55
回答 2查看 266关注 0票数 0

我有一些来自pdsh的输出,我想格式化它以加载到DB中。我需要它在3列,实质上想要模块ID和消息在一行。贝娄是我的输出:

代码语言:javascript
复制
10.125.45.58,scope, Module ID     = server-1
10.125.45.58,scope, Message       = Correctable memory error
10.125.45.58,scope, Module ID     = server-2
10.125.45.58,scope, Message       = Correctable memory error 

这是我需要的输出:

代码语言:javascript
复制
10.125.45.58,scope,server-1 Correctable memory error
10.125.45.58,scope,server-2 Correctable memory error

我一直醒着.我想不出什么主意?

以下是我迄今所做的工作

代码语言:javascript
复制
cat myfile.txt | sed -e "s/:/\,scope\,/g" | grep -E '(Module ID|Message)'

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-03 15:28:13

代码语言:javascript
复制
$ cat ip.txt 
10.125.45.58,scope, Module ID     = server-1
10.125.45.58,scope, Message       = Correctable memory error
10.125.45.58,scope, Module ID     = server-2
10.125.45.58,scope, Message       = Correctable memory error 

$ sed 'N; s/\n.*=//; s/ *Module ID.*= *//' ip.txt 
10.125.45.58,scope,server-1 Correctable memory error
10.125.45.58,scope,server-2 Correctable memory error 
  • N获得下一行,因此替换可以适用于每两行一起考虑的
  • s/\n.*=//;从换行符删除到最后一个=
  • 然后s/ *Module ID.*= *//删除从Module ID=的所有内容,其中包含可选的空格。
票数 1
EN

Stack Overflow用户

发布于 2016-11-03 18:32:10

sed是用于单行上的简单替换,仅此而已。对于任何其他方面,您都应该使用awk来实现可移植性、效率、简单性、清晰性、可维护性和软件的大多数其他理想属性:

代码语言:javascript
复制
$ awk 'NR%2{srvr=$NF;next} {ip=$1; sub(/.*=/,""); print ip srvr $0}' file
10.125.45.58,scope,server-1 Correctable memory error
10.125.45.58,scope,server-2 Correctable memory error
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40405255

复制
相关文章

相似问题

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