我需要将 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