Решение разбивается на две части.
Процесс прост. Вы должны передать весь скрипт в качестве аргумента для 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
Поскольку у меня нет жизни , у меня было немного свободного времени, и поскольку я (очевидно) никогда не смогу научиться должным образом 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
!
Не уверен насчет вычисления 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