Сгруппировать элементы по порядковому номеру

В AWK:

{ sum += $1 }
END { print sum }

Итак,

du -b /tmp/* | awk '{ sum += $1 } END { print sum }'

Обратите внимание, что результат будет неправильным, если каталоги в /tmpсами имеют подкаталоги, потому что duпроизводит промежуточные итоги по каталогам и их дочерним элементам.

du -sправильно рассчитает для вас сумму (по всем подкаталогам и файлам в /tmp, включая скрытые):

du -sb /tmp

и du -cтакже правильно вычислят сумму перечисленных каталогов и файлов:

du -cb /tmp/*
0
16.06.2019, 00:38
2 ответа

Поскольку ваши файлы данных уже отсортированы, вам просто нужно сравнить первое значение каждой строки (после первой )с предыдущим значением -, убедившись, что они подвергаются числовому преобразованию. Итак, если (, как указано в комментариях ), все, что вам нужно, это подсчет, вы можете сделать:

awk '
  BEGIN { if(getline == 1) {last = $1+0; c = 1}}
  last - $1 > 1 {c++} 
  {last = $1+0} 
  END {print c}
' file
1
28.01.2020, 02:40

С помощью GNU awk для ENDFILE:

$ cat tst.awk
FNR==1 { prev=$1; cnt=1; fname=FILENAME; next }
(prev - $1) > 1 { cnt++ }
{ prev = $1 }
ENDFILE { print fname, cnt }

$ awk -f tst.awk *
file1 8
file2 3
file3 24

С любым awk:

$ cat tst.awk
FNR==1 {
    if ( NR > 1 ) {
        print fname, cnt
    }
    prev = $1
    cnt = 1
    fname = FILENAME
    next
}
(prev - $1) > 1 { cnt++ }
{ prev = $1 }
END { print fname, cnt }
0
28.01.2020, 02:40

Теги

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