получить среднее значение для всех чисел с неправильными столбцами

"Теперь мне интересно, есть ли способ проверить, переходит ли программа в бесконечный цикл, прежде чем все входные данные будут считаны. Например, если программа переходит в бесконечный цикл, это единственный способ остановить программу "

Мы знаем ответ на этот вопрос в течение почти восьмидесяти лет . Ответ - нет, нет пути.

Спасибо, что дали вопрос, который даже не был близок к вашему фактическому вопросу:

"Я пытаюсь оценить результаты ученичества. Я просто хочу создать сценарий, чтобы использовать его в будущем. Сейчас у меня достаточно хорошо работает с помощью таймера сна, но я хочу сделать сценарий более надежным без таймера "

Простое решение:

# how many seconds of CPU (not wall clock)
# should the student's program get?
# 10 seconds is generous for an intro class
# 60 seconds of CPU would be obscene
$ ulimit -t 10
$ run_student_program

# but since I don't have a student program

$ time dd if=/dev/zero of=/dev/null
Killed

real    0m9.998s
user    0m3.080s
sys     0m6.912s

-121--290947-

Это пакетные сценарии - как в MS Windows Batch. FINDSTR был представлен в комплекте ресурсов Windows NT 4.

:: и rem являются комментариями. (Или :: на самом деле является меткой с недопустимым именем ).

Вероятно, вы могли бы запустить их под wine cmd , но лучше бы портировать их на какой-нибудь родной сценарий (perl, python, bash и т. д.).

Простой пример:

#!/bin/bash

# Function to print usage and exit
usage()
{
    printf "Usage: %s [repository] [transaction_id]\n" $(basename "$1") >&2
    exit 1
}

# Check that we have at least 2 arguments
[ $# -ge 2 ] || usage

repo="$2"
trans_id="$2"

# Check that command succeed, and set variable "msg" to output
if ! msg="$(svnlook log "$repo" -t "$trans_id")"; then
    printf "Check path and id.\n" >&2
    usage
fi

# If msg is empty
if [ "$msg" = "" ]; then
    printf \
"Your commit has been blocked because you didn't give any log message
Please write a log message describing the purpose of your changes and
then try committing again. -- Thank you.\n" >&2
     exit 2    
fi

# Else default exit AKA 0

-121--290943-

Как вы отметили, повторный вызов firefox просто попросит запущенный экземпляр открыть другое окно. Для запрета такого поведения можно использовать переключатель -no-remote .

Нечто подобное происходит с nautilus : он используется для отображения окна рабочего стола (со значками), поэтому он уже запущен при его запуске.

1
30.05.2018, 20:14
3 ответа

Si desea el promedio de todos los números en todas las columnas, esto es simple

awk '   { for (i=1;i<=NF  ;i++){ sum+=$i;num++} }
     END{ print(sum/num) } ' infile

Si desea el promedio por columna, solo mantenga un registro del número máximo de columnas:

awk '   {for (i=1;i<=NF  ;i++){ if(maxF<NF){maxF=NF};sum[i]+=$i;num[i]++} }
     END{for (i=1;i<=maxF;i++){ print(i,sum[i]/num[i]) } } ' infile
0
28.01.2020, 00:34

enfoque GNUawk:

awk -v FPAT='[1-9][0-9]*' '{ n += NF; for (i=1;i<=NF;i++) sum += $i }END{ print sum/n }' file

La salida:

4.88889
0
28.01.2020, 00:34

Convertiría los espacios en líneas nuevas y tendría un solo número por línea:

tr ' ' '\n' <"$infile" | awk '$1 > 0 {n++; sum+=$1} END {if (n>0) print sum/n}'
0
28.01.2020, 00:34

Теги

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