convertendo informações de texto simples para csv ou excel

0

Eu tenho um arquivo contendo dados semelhantes, que estou tentando organizar da mesma forma, abaixo estão os detalhes. Eu modifiquei o script de acordo com as variáveis no contexto incapaz de obter o resultado desejado. Provavelmente, é devido à falta de meu conhecimento sobre o awk e conhecimento limitado sobre scripts.

Virtual_Machine  OL6U6  
Vdisk  0004fb00001200005e2ca2d2c7fc2d6f.img size 46GB
Vdisk  0004fb0000120000597ab28f2b6493f8.img size 51GB
Vdisk  0004fb00001200003edc9a2ae9cd5aa6.img size 31GB
Physical_Disk  IBM (796)
device /dev/mapper/dm-0
shareddisk true
Physical_Disk  IBM (829)
device /dev/mapper/dm-1
shareddisk true
Physical_Disk  IBM (830)
device /dev/mapper/dm-2
shareddisk true
Physical_Disk  IBM (742)
device /dev/mapper/dm-3
shareddisk true

Estou tentando obtê-lo no formato abaixo. Aqui nós temos duas condições. M = Número de Physical_Disk N = Número de Vdisk Se M > N, linhas para Virtual_Machine = M Se M < N linhas para Virtual_Machine = N

Virtual Machine      Vdisk                                     size           Physical_Disk    device              shareddisk
OL6U6               0004fb00001200005e2ca2d2c7fc2d6f.img       46GB           IBM (796)        /dev/mapper/dm-0     true
OL6U6               0004fb0000120000597ab28f2b6493f8.img       51GB           IBM (829)        /dev/mapper/dm-1     true
OL6U6               0004fb00001200003edc9a2ae9cd5aa6.img       31GB           IBM (830)        /dev/mapper/dm-2     true
OL6U6               -                                         -              IBM (742)         /dev/mapper/dm-2     true

Por favor, informe.

Atenciosamente, Darshan

    
por IgniteLX 31.01.2016 / 13:29

1 resposta

1

Você pode fazer isso com o awk, mantendo matrizes para o título e ano do livro, assim como para os trabalhos. No seu exemplo, não há anos para os artigos, então eles são simplesmente listados na segunda coluna como título.

Aqui está um exemplo:

#!/usr/bin/awk -f
function finish() {
    rows = book;
    if (rows < paper) rows = paper;
    for (n = 0; n <= rows; ++n) {
            printf "%-15s %-25s %-8s %s\n",
            author,
            n <= book ? books[n] : "-",
            n <= book ? years[n] : "-",
            n <= paper ? papers[n] : "-";
    }
    book = -1;
    paper = -1;
}
BEGIN {
    author = "?";
    book = -1;
    paper = -1;
    printf "Author          Books                     year     Papers\n";
}
/^[[:space:]]*Author[[:space:]]/ {
    finish();
    author = $0;
    sub("^[^[:space:]]+[[:space:]]+", "", author);
    sub("[[:space:]]+$", "", author);
    next;
}
/^[[:space:]]*(e)?paper[[:space:]]/ {
    ++paper;
    item = $0;
    sub("^[^[:space:]]+[[:space:]]+", "", item);
    sub("[[:space:]]+$", "", item);
    papers[paper] = item;
    next;
}
/^[[:space:]]*([eE])?[bB]ook[[:space:]].*year[[:space:]]+[[:digit:]]+[[:space:]]*$/ {
    ++book;
    item = $0;
    sub("^[^[:space:]]*[[:space:]]*", "", item);
    sub("[[:space:]]+$", "", item);
    title = item;
    sub("[[:space:]]*year[[:space:]]+[[:digit:]]+$", "", title);
    year = item;
    sub("^.*year[[:space:]]+", "", year);
    books[book] = title;
    years[book] = year;
    next;
}
END {
    finish();
}

com saída:

$ ./foo <foo.in
Author          Books                     year     Papers
E. Narayanan    Astrophysics              2001     Intelligent Transportation
E. Narayanan    General Mechanics         2010     Nanotechnology Magazine
E. Narayanan    Nuclear physics           2011     -
R Ramesh        Organic Chemistry         2007     Ionic Batteries
R Ramesh        Physical chemistry        2008     solar photocatalytic oxidation processes
R Ramesh        -                         -        Biological oxidation
    
por 31.01.2016 / 15:26