Awk - Сравните значение из столбца с переменной, посчитайте, сколько раз оно проходит для каждого идентификатора

@Jeff Schaller, это помогло решить проблему,

---
 - hosts: ansi2
   become: yes
   gather_facts: no
   tasks:
   - name: checking shell power
     shell:
             '>/tmp/1.txt'
     args:
      executable: /bin/bash

А что, если мне нужно запустить несколько команд

0
14.03.2017, 18:19
2 ответа
perl -lane '$h{$F[0]} += $F[3] >= 4 ? 1 : 0}{print "$_\t$h{$_}" for keys %h' toyModel
{{ 1}}
0
28.01.2020, 02:25

Вам нужно накопить счетчики на каждый идентификатор и распечатать результат после обработки файла:

awk '!counts[$1] { counts[$1] = 0 }; $4 >= 4 { counts[$1]++ }; END { for (key in counts) print key, counts[key] }' toyModel

Первый оператор гарантирует, что мы измеряем идентификаторы, которые никогда не совпадают с критерий (заканчивая выходом 0). Второй увеличивает счетчик совпадающих строк. Последний оператор выполняет итерацию по ключам (идентификаторам) и выводит ключ и количество совпадений.

Если размер слишком велик для этого подхода (массив counts становится слишком большим), а ваши идентификаторы непрерывны в файле, вы можете вместо этого использовать этот подход:

awk 'curid != $1 { if (NR > 1) print curid, count; curid = $1; count = 0 }; $4 >= 4 { count++ }; END { print curid, count }' toyModel

Это сохраняет текущий id и count, и печатает их всякий раз, когда id изменяется (и в конце). Каждый раз, когда четвертое поле больше 4, счетчик увеличивается, а всякий раз, когда изменяется идентификатор, счетчик сбрасывается.

3
28.01.2020, 02:25

Теги

Похожие вопросы