У меня есть файл со следующими входными данными:

Sample1

Feature 1
A
B
C
D
Feature 2
E
F
G

Sample2:

Feature 1
H
I
Feature 2
L
O
P

И я хотел бы получить следующий вывод:

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

В общем, я пытаюсь подсчитать, сколько элементов в каждой функции, и для каждого образца в отдельности

Я попытался с помощью следующей команды:

awk '{if(/^\Feature/){n = $ 0;} else {l [n]++}} END {for(n in l){print n ":" l [n]}}' inputfile> выходной файл

Но это в основном дало мне следующий вывод (он подсчитал все функции для всех образцов)

Feature 1: 6
Feature 2: 6

Может кто-нибудь помочь мне изменить эту команду или предложить другую?

1 ответ1

0

файл 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
}

затем

$ awk -f summarize.awk file
Sample1
Feature 1: 4
Feature 2: 3
Sample2:
Feature 1: 2
Feature 2: 3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .