um loop no comando awk

0

Eu tenho um arquivo com os seguintes dados de entrada:

Sample1

Feature 1
A
B
C
D
Feature 2
E
F
G

Sample2:

Feature 1
H
I
Feature 2
L
O
P

Eu gostaria de ter a seguinte saída:

Sample1
Feature 1: 4
Feature 2: 3
Sample2
Feature 1: 2
Feature 2: 3

Então, basicamente, estou tentando contar quantos elementos existem em cada recurso e para cada amostra separadamente

Eu tentei usar o seguinte comando:

awk '{if(/^\Feature/){n=$0;}else{l[n]++}}END{for(n in l){print n" : "l[n]}}' inputfile > outputfile

Mas basicamente me deu a seguinte saída (contou todos os recursos para todas as amostras)

Feature 1: 6
Feature 2: 6

Alguém por favor pode me ajudar a modificar este comando ou sugerir outro?

    
por Monah 01.06.2018 / 18:02

1 resposta

0

arquivo summarize.awk :

function print_feature() {
    if (feature) print feature ": " n
    n = 0
    feature = ""
}
NF == 0 {                 # empty line. 
    print_feature()         # print the feature summary
    in_feature = 0          # we are no longer counting elements
    next                    # do not print the empty line
}
$1 == "Feature" {         # a new feature
    print_feature()         # print the previous feature summary
    feature = $0            # save this as the new feature
    in_feature = 1          # indicate we are counting elements
    next                    # do not print ... yet
}
{
    if (in_feature) 
        n++                 # count this element
    else                    # or
        print               # print (e.g. "Sample")
}
END {
    print_feature()         # if there is no trailing blank line, print the current feature
}

Então

$ awk -f summarize.awk file
Sample1
Feature 1: 4
Feature 2: 3
Sample2:
Feature 1: 2
Feature 2: 3
    
por 01.06.2018 / 21:13

Tags