altera o formato de saída de um arquivo de texto em unix [closed]

1

Como posso alterar o formato de saída de um arquivo de texto no unix?

Precisa usar comandos unix para trabalhar nesses arquivos de texto.

Saída atual: (ABC.txt)

Day Count
10 210
11 112
12 275
13 120
Day Count2
10 105
12 118
15 119

Saída esperada: (XYZ.txt)

Day Count Count2
10   210   105
11   112    0
12   275   118
13   120    0
15    0    119

Também qual comando unix eu posso usar para calcular% de Count e Count2 para obter a seguinte saída.

Saída esperada: (XYZ1.txt)

Day Count Count2 Percentage
10   210   105      50%
11   112    0        0%
12   275   118      43%
13   120    0        0%
15    0    119      100%

Obrigado,

    
por Nitish gopalika 23.10.2018 / 16:58

2 respostas

0

Eu fiz um pequeno script awk :

awk '
{
    if ( $1 == "Day" )
        c=$2;
    else
        v[$1][c]=$2;
    next;
} END {
    print "Day","Count","Count2","Percent";
    for (day in v)
    {
        c1=(!(v[day]["Count"]) ? 0 : v[day]["Count"]);
        c2=(!v[day]["Count2"] ? 0 : v[day]["Count2"]);
        p=(c1>0 ? c2/c1*100 : 100);
        printf("%s %s %s %.0f%%\n",day,c1,c2,p);
    }
}
' ABC.txt | column -t

envia a saída para um arquivo, basta adicionar > XYZ1.txt ao final.

    
por 23.10.2018 / 17:49
0

Se você quiser os dias na ordem de ocorrência, tente esta adaptação da proposta do RoVo:

awk -v"MN=1E100" '
$1 == "Day"     {c = $2
                 next
                }
                {v  [$1+0, c] = $2
                 if ($1 < MN) MN = $1
                 if ($1 > MX) MX = $1
                }
END             {C1 = "Count"
                 C2 = "Count2"
                 print "Day", C1, C2, "Percent";
                    for (i=MN; i<=MX; i++)      {T1 = v[i,C1] + 0
                                                 T2 = v[i,C2] + 0
                                                 PC = (T1>0?T2/T1:1)*100
                                                 if (T1 || T2) print i, T1, T2, PC "%" 
                                                }
                }
' OFS="\t" CONVFMT="%.0f" file
Day Count   Count2  Percent
10  210     105     50%
11  112     0       0%
12  275     118     43%
13  120     0       0%
15  0       119     100%
    
por 23.10.2018 / 19:31