Вероятно, вы установили пакет cron-apt
, который запускает apt-get update
через равные промежутки времени.
No sé datamash
, pero aquí hay una solución awk
:
$ awk '{ for( col=1; col<=NF; col++ ) { totals[col]+=$col } } END { for( col=0; col<length(totals); col++ ) {printf "%s ", totals[col]}; printf "\n" } ' input
1332 1665 1998
Para hacer ese script awk
más legible:
{ // execute on all records
for( col=1; col<=NF; col++ ) {
totals[col]+=$col
};
}
END { // execute after all records processed
for( col=0; col<length(totals); col++ ) {
printf "%s ", totals[col]
};
printf "\n";
}
cols=$( awk '{print NF; exit}' foo); cat foo | datamash -t\ sum 1-$cols
o
cat foo | datamash -t\ sum 1-$( awk '{print NF; exit}' foo)
datamash
tiene una función para especificar rangos de columnas, así que calcule el número de columnas y use ese resultado como parte de la especificación del rango. En mi solución de ejemplo, usé awk
para verificar solo la primera línea del archivo y salir, pero podría usar cualquier otra cosa que se adapte a sus necesidades. datamash
en sí tiene una función -check
cuya salida incluye el número de columnas, pero en un formato que todavía necesitaría ser analizado para el número específico que le interese.
No veo una opción para especificar rango desconocido en manual de datamash
Prueba este perl
uno -trazador de líneas
$ perl -lane '$s[$_]+=$F[$_] for 0..$#F; END{print join " ", @s}' ip.txt
1332 1665 1998
-a
dividirá automáticamente la línea de entrada en espacios en blanco, los resultados se guardan en la matriz @F
for 0..$#F
para recorrer la matriz, $#F
da el índice del último elemento $s[$_]+=$F[$_]
guarde la suma en la matriz @s
, por defecto el valor inicial será 0
en contexto numérico. $_
tendrá el valor del índice para cada iteración END{print join " ", @s}
después de procesar todas las líneas de entrada, imprime el contenido de la matriz @s
con un espacio como separador Использование datamash
иbash
:
n=($(datamash -W check < foo)); datamash -W sum 1-${n[2]} < foo
Выход:
1332 1665 1998
Как это работает:
datamash -W check < foo
выводит строку "3 строки, 3 поля" .
n=($(datamash -W check < foo))
загружает эту строку в массив $n
. Нам нужно количество полей, которое будет ${n[2]}
.
datamash -W sum 1-${n[2]} < foo
сделает все остальное.
Это также можно сделать с оболочкой POSIX , используя сложную printf
строку форматирования вместо массива, но это сложнее:
datamash -W sum 1-$(printf '%0.0s%0.0s%s%0.0s' $(datamash -W check < foo)) < foo
Это также можно сделать с помощью инструментов оболочки:
datamash -W sum 1-$(head -1 foo | wc -w) < foo