Определение среднего значения, stdev, stderror и количества значений в списке

Решение разбивается на две части.

Первая часть — Запуск скрипта

Процесс прост. Вы должны передать весь скрипт в качестве аргумента для bash.

bash -c 'export DISPLAY=:0 ; sudo <app_name>'

Я не использую powershell. Поэтому избегайте соответствующих частей в соответствии с синтаксисом powershell в приведенной выше строке.

Вторая часть — пропуск пароля

Для этого вам необходимо разрешить вход без пароля в файле sudoers, расположенном по адресу /etc/sudoers. Введите следующий фрагмент кода (замените user на ваше имя пользователя) в конце /etc/sudoers, используя sudo nano /etc/sudoers .

user ALL=(ALL) NOPASSWD: ALL 

Это, однако, изменит поведение sudo по умолчанию, и указанный пользователь никогда не будет запрашивать пароль при использовании sudo

0
22.11.2016, 09:32
2 ответа

Поскольку у меня нет жизни , у меня было немного свободного времени, и поскольку я (очевидно) никогда не смогу научиться должным образом awk , я просто написал это вместе, чтобы посмотрим, смогу ли я решить это на Python.

Ничего не убирать из awk @ Kamaraj (я проголосовал "за").

#!/usr/bin/env python3

colDict = {}  

with open ("cols") as infile: # Open the file
    for line in infile: # Read line by line
        splitLine = line.split() # Split line into list
        if splitLine[0] not in colDict: # Is value _not_ already in dict?
            value = splitLine[0] # Create new value
            colDict[value] = {} # Create nested dict
            colDict[value]["Avg"] = float(splitLine[1]) # Insert 'avg' 
            colDict[value]["Count"] = 1 # Insert count
        else: # Value _is_ in dict
            colDict[value]["Avg"] += float(splitLine[1]) # Add 'avg' float value
            colDict[value]["Count"] += 1 # Increment counter

print("Value\t\tAvg\tCount")
for value in sorted(colDict):
    print("{0}\t{1:.2f}\t{2}".format(value, 
                              colDict[value]["Avg"]/colDict[value]["Count"],
                              colDict[value]["Count"]))

После выполнения:

./parseCols.py
Value           Avg     Count
ACKR1/CCRL2     12.66   1   
ACKR1/CMKLR1    10.41   1   
ACKR1/CXCR4     13.01   1   
ACKR1/FZD5      10.72   1   
ACKR1/GPR107    10.22   1   
ACKR1/GPR137    10.73   1   
ACKR1/GPR146    11.93   1   
ACKR1/TAPT1     11.24   1   
ACKR1/TPRA1     11.81   1   
ACKR1/XPR1      10.01   1   
ACKR2/ACKR3     11.16   7   
ACKR2/ADGRA2    9.02    3  

Единственная разница в выводе состоит в том, что мой сортируется (по Value ) и что я округляю Avg до двух десятичных знаков.

Снова; Благодарим @Kamaraj за написание такого компактного решения в awk !

3
28.01.2020, 02:15

Не уверен насчет вычисления Stdev и Sterr. но используя этот метод, вы можете легко вычислить их

$ awk '{A[$1]++;B[$1]+=$2}END{print "Value\t\tAvg\tCount";for (i in A){print i"\t"B[i]/A[i]"\t"A[i]}}' input.txt
Value           Avg     Count
ACKR2/ADGRA2    9.01667 3
ACKR1/GPR107    10.22   1
ACKR1/XPR1      10.01   1
ACKR1/CMKLR1    10.41   1
ACKR1/CCRL2     12.66   1
ACKR1/GPR146    11.93   1
ACKR1/GPR137    10.73   1
ACKR1/CXCR4     13.01   1
ACKR2/ACKR3     11.1586 7
ACKR1/TPRA1     11.81   1
ACKR1/FZD5      10.72   1
ACKR1/TAPT1     11.24   1

awk '{
A[$1]++;B[$1]+=$2
}
END
{
print "Value\t\tAvg\tCount";
for (i in A)
{
print i"\t"B[i]/A[i]"\t"A[i]
}
}'  input.txt
3
28.01.2020, 02:15

Теги

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