В 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/*
Поскольку ваши файлы данных уже отсортированы, вам просто нужно сравнить первое значение каждой строки (после первой )с предыдущим значением -, убедившись, что они подвергаются числовому преобразованию. Итак, если (, как указано в комментариях ), все, что вам нужно, это подсчет, вы можете сделать:
awk '
BEGIN { if(getline == 1) {last = $1+0; c = 1}}
last - $1 > 1 {c++}
{last = $1+0}
END {print c}
' file
С помощью 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 }