我有一些来自pdsh的输出我想格式化它以加载到DB中。我需要3列,基本上需要模块ID和消息在一行。贝娄是我的输出:
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
这是我需要的输出:
10.125.45.58,scope,server-1 Correctable memory error
10.125.45.58,scope,server-2 Correctable memory error
我一直在想着......我无法解决任何想法?
这是我到目前为止所做的事情
cat myfile.txt | sed -e "s/:/\,scope\,/g" | grep -E '(Module ID|Message)'
谢谢。
答案 0 :(得分:1)
$ 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 :(得分:0)
sed用于单行上的简单替换,即全部。对于其他任何事情,您应该使用awk实现可移植性,效率,简单性,清晰度,可维护性以及软件的大多数其他理想属性:
$ 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