我有一个如下所示的输出文件:
HEADER 1:
server1 server2 server3
server4 server5 server6
server7 server8 server9
HEADER 2:
HEADER 1:
server10 server11 server12
server13 server14 server15
server16 server17 server18
HEADER 2:
我需要合并两个标头之间的所有内容,以便更新的输出文件如下所示:
HEADER 1:
server1 server2 server3 server4 server5 server6 server7 server8 server9
HEADER 2:
HEADER 1:
server10 server11 server12 server13 server14 server15 server16 server17 server18
HEADER 2:
标题名称始终保持不变。
我在Windows中使用UnxUtils,所以不幸的是我没有awk来进行操作。我如何使用sed来解决这个问题?
答案 0 :(得分:14)
使用sed:
sed '/HEADER 1/{n;:l N;/HEADER 2/b; s/\n//; bl}' input
n
跳过/打印当前行(HEADER 1),清除缓冲区l
是循环标签(转到标签)N
向缓冲区添加(追加)行(保留换行符)/HEADER 2/b
,其中b是分支(没有标签,它是中断),当看到HEADER2时突然出现s/\n//
删除缓冲区中的换行符bl
跳回标签l
答案 1 :(得分:3)
这显示了如何使用awk
来完成
您可以下载Gawk
for Windows
awk '/HEADER/ {printf "\n%s\n",$0;next} {printf "%s ",$0}' file
HEADER 1:
server1 server2 server3 server4 server5 server6 server7 server8 server9
HEADER 2:
HEADER 1:
server10 server11 server12 server13 server14 server15 server16 server17 server18
HEADER 2: