Использование awk для суммирования значений столбца в зависимости от того, пусто оно или нет в другом столбце

Вы можете попробовать запустить rsync в сценарии .bashrcили .profile... так вы всегда будете получать новейшие данные из любой активной ОС.

-1
24.02.2020, 11:10
2 ответа

Вы можете использовать awk-массивы, проиндексированные по условию, которое необходимо выполнить, а затем распечатать все значения в массиве, например:

awk 'BEGIN {FS = "\t"}; NR>1 {sum[$2!=""] += $3}; END{for (i in sum) print i, sum[i]}' test.tsv 

Массив sumбудет содержать два значения: sum[false]или sum[0]для суммы значений, не соответствующих условию, и sum[true]или sum[1]для значений, соответствующих условию.

Вывод на вашем примере:

0 30
1 70
1
28.04.2021, 23:22

Что-то вроде

awk 'BEGIN { FS=OFS="\t" }
     NR > 1 && $2 == "" { empty += $3 }
     NR > 1 && $2 != "" { full += $3 }
     END { print "Empty", empty; print "Text", full }' input.tsv
1
28.04.2021, 23:22

Теги

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