Acrescentar uma coluna de uma correspondência anterior no arquivo CSV

3

Eu tenho um arquivo CSV com o seguinte formato ( ; é o delimitador):

KEY;..;..;..;..;id1;..;..
SUBKEY;..;..
SUBKEY;..;..
SUBKEY;..;..

KEY;..;..;..;..;id2;..;..
SUBKEY;..;..
SUBKEY;..;..
SUBKEY;..;..

Eu preciso pegar o id (sexta coluna) de cada linha, começando com KEY e, em seguida, anexando-o às seguintes linhas começando com SUBKEY . Então o resultado deve ser algo assim:

SUBKEY;..;..;id1
SUBKEY;..;..;id1
SUBKEY;..;..;id1

SUBKEY;..;..;id2
SUBKEY;..;..;id2
SUBKEY;..;..;id2

Alguma ideia de como isso pode ser feito no script bash?

    
por bachr 24.05.2018 / 13:18

3 respostas

3

Awk solução:

awk 'BEGIN{ FS = OFS = ";" }
     $1 == "KEY"{ id = $6; next }
     { print $0 (NF? OFS id : "") }' file.csv
  • FS = OFS = ";" - trata ; como separador de campo ( FS ) e separador de campo de saída ( OFS )
  • $1 == "KEY"{ id = $6; next } - se o primeiro campo $1 for igual a "KEY" string - defina id variable com o sexto campo $6 . % next forçará awk a pular para o próximo registro (ignorando o atual)
  • print $0 (NF? OFS id : "") - imprime / imprime todo o registro $0 com condição:
    se houver algum campo dentro de um registro (assegurado pela variável interna NF ), ou seja, o registro não está vazio - anexar ; ( como OFS ) e atual id valor ao final do registro

A saída:

SUBKEY;..;..;id1
SUBKEY;..;..;id1
SUBKEY;..;..;id1

SUBKEY;..;..;id2
SUBKEY;..;..;id2
SUBKEY;..;..;id2
    
por 24.05.2018 / 13:27
3

Sed solução:

sed -E '/^KEY/{s/([^;]*;){5}([^;]*).*//;h;d};/;/{G;s/\n/;/}' file.csv
  • / ^ KEY / {s / ([^;] ;) {5} ([^;] ). * / \ 2 /; h; d}

Se a linha começar com KEY, mantenha o 6º campo no espaço de espera e exclua a linha

  • /; / {G; s / \ n /; /}

Se a linha contiver campo, obtenha o espaço de espera no final e substitua \ n por;

    
por 24.05.2018 / 15:00
0

Consegui consertar isso ao fazer isso sed -r 's | ^ (\ S +) (\ s + \ S +) $ | s / ^ \ 1. * / \ & \ 2 / p |' arquivo2 | sed -nf - file1

Agora estou enfrentando um problema em que preciso anexar em um arquivo CSV uma coluna com o nome do ESX em que o servidor está Anexar campo ao csv com base na pesquisa condicional de outro arquivo

    
por 11.12.2018 / 18:11