procura valores depois de colunas específicas de cadeia de caracteres múltiplas

3

Eu tenho este arquivo (copiado do vim):

name: some name^M
^M
count: 1^M
^M
region: some_region
name: some name^M
^M
count: 2^M
^M
region: some_region^M
^M
name: some name^M
^M
count: 1^M
^M
region: some_region^M
^M

Testing Powershell scripts execustions from Rundeck server against Windows server

Como obter apenas valores após nome, contagem e região

resultado desejado:

some name 1 some region
some name 2 some region
some name 1 some region

com grep -E 'name|count|region' output.txt | sed 's/^.*: //'

eu tenho

some name
1
some_region
some name
2
some_region
some name
1
some_region

Como gerar várias colunas?

    
por Milister 29.03.2018 / 13:02

3 respostas

0

Consegui a saída mencionada em 2 etapas

No primeiro passo1 sou pesquisado por padrão e salvo em um arquivo Output.txt

Na segunda etapa2, usei o loop e imprimi o conteúdo conforme o requisito

passo1

egrep -i "name|count|region" l.txt | awk -F ":" '{print $NF}' | sed "s/\^M//g" >> Ouput.txt

passo 2

for ((i=1;i<=9;i=i+3)); do sed -n ''$i',+2p' Output.txt |sed "N;s/\n/ /g" |sed "N;s/\n/ /g"; done

saída

 some name  1  some_region
 some name  2  some_region
 some name  1  some_region
    
por 29.03.2018 / 19:07
2

Awk solução:

awk '/^(name|count|region):/{
         sep = (/^region/? ORS : OFS);
         gsub(/^[^:]+:[[:space:]]*|[[:space:]]*$/, "");
         printf "%s%s", $0, sep 
     }' file.txt

A saída:

some name 1 some_region
some name 2 some_region
some name 1 some_region
    
por 29.03.2018 / 13:51
0

Uma resposta possível usando o awk:

awk '/name: /{name=substr($0,7)} /count: /{cnt=substr($0,8)} /region:/{print name" "cnt" "substr($0,9)}' input
    
por 29.03.2018 / 13:45