将两行合并为一行,从两行中选择选定的单词

将两行合并为一行,从两行中选择选定的单词

我需要将 file1 转换为每行包含三个单词,其中第一个是从行开始的第二个单词“机器人”第二个单词是行首的第二个单词'1)'最后第三个单词是从以下行开始的第四个单词'1)'。请参阅下面的示例...

$cat file1
ROBO lab1 - Topology:
1) 10.195.41.1          10.195.41.255        comment1         
ROBO lab2 - Topology:
1) 10.95.4.1            10.95.4.254          comment2 

到 :

lab1 10.195.41.1 comment1
lab2 10.95.4.1 comment2

我最终得到以下结果:

sed 'N;s/\n/ /' file1| awk '{ if ($6 ~ /^10\./) print $2 " " $6}'

但当我有这样的事情时它就会崩溃:

ROBO lab1 - Topology:
ROBO lab1 - Topology:
1) 10.195.41.1          10.195.41.255        comment1         
ROBO lab2 - Topology:
1) 10.95.4.1 

我需要控制第一行以“机器人”第二个开头是'1)'如果没有,则向下移动文件......直到我遇到正确的一对

答案1

$ awk '/^ROBO/ { n = $2 } /^1\)/ { $1 = n; $3 = ""; print }' file1
lab1  10.195.41.1  comment1
lab2  10.95.4.1  comment2

这按预期工作,但会收缩注释中的任何连续空格。

第一部分提取任意ROBO行上的第二个单词。

第二部分将1)用最近ROBO行中的单词替换任何行的第一个输入字段,并在打印修改的记录之前清空第三个输入字段。

对于第二组示例输入,这会产生

lab1 10.195.41.1  comment1
lab2 10.95.4.1

答案2

简单地与awk

“...以这样的方式转换 file1,使其具有每一行的字...”

awk '/^ROBO/{ printf "%s ",$2  }/^1\)/{ printf "%s %s\n",$2,$4 }' file1

输出:

lab1 10.195.41.1 comment1
lab2 10.95.4.1 comment2

相关内容