Mesclar duas linhas em uma escolhendo palavras selecionadas de ambas

0

Eu preciso converter arquivo1 é tal maneira que ele tem três palavras em cada linha, onde primeiro é segunda palavra da linha começando com 'ROBO' e segunda palavra é segunda palavra da linha começando com < strong> '1)' e finalmente terceira palavra é a quarta palavra a partir da linha que começa com '1)' . Veja o exemplo abaixo ...

$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 

para:

lab1 10.195.41.1 comment1
lab2 10.95.4.1 comment2

Acabei com o seguinte:

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

mas quebra quando eu tenho algo assim:

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

Eu preciso controlar que a primeira linha começa com 'ROBO' e a segunda começa com '1)' e mova o arquivo se não ... até eu encontrar o par certo

    
por irom 12.09.2017 / 21:28

2 respostas

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

Isso funciona como esperado, mas irá contrair quaisquer espaços consecutivos nos comentários.

A primeira parte extrai a segunda palavra em qualquer linha ROBO .

A segunda parte substituirá o primeiro campo de entrada de qualquer linha 1) pela palavra da linha ROBO mais recente e esvaziará o terceiro campo de entrada antes de imprimir o registro modificado.

Para o segundo conjunto de entrada de exemplo, isso produz

lab1 10.195.41.1  comment1
lab2 10.95.4.1
    
por 13.09.2017 / 00:02
1

Simplesmente com awk :

"... convert file1 in such way that it has three words in each line ..."

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

A saída:

lab1 10.195.41.1 comment1
lab2 10.95.4.1 comment2
    
por 12.09.2017 / 23:56

Tags