Cambié el permiso en su carpeta de nombre de usuario en el directorio de inicio:
sudo chmod 755 {username_folder}
y eliminé el archivo.Xauthority y funcionó.
`sudo rm.Xauthority`
Используйте ассоциативный массив в awk
для подсчета вхождений нулей для каждой группы:
awk '$3 == 0 && ++count[$1] || count[$1] { next } END { for (group in count) printf("%s%s%d\n", group, OFS, count[group]) }' file
Немного неловко
$3 == 0 && ++count[$1] || count[$1] { next }
проверит, равен ли третий столбец нулю, и если да, то увеличит счетчик для этой группы. Если это не так, он по-прежнему создает пустой элемент для этой группы в массиве count
. Нам нужно это, чтобы иметь возможность сообщать группы с нулевыми нулями в конце. next
предназначен только для перехода к следующей строке ввода.
Муру указывает в комментариях, что этот бит можно заменить немного более коротким
{ count[$1] += ($3 == 0) }
, где $3 == 0
будет либо 0, либо 1 в зависимости от значения в третьем столбце.
Вывод в конце выполняется с помощьюprintf()
:
printf("%s%s%d\n", group, OFS, count[group])
Это напечатает группу (из первого столбца входных данных )вместе с соответствующим количеством нулей,сOFS
(разделителем полей вывода; по умолчанию пробел )в -между ними.
Если счетчик отсутствует для одной группы, формат printf()
%d
будет вставлять ноль.
Тестирование:
$ awk '$3 == 0 && ++count[$1] || count[$1] { next } END { for (group in count) printf("%s%s%d\n", group, OFS, count[group]) }' file
A 2
B 0
for i in `awk '{if(!seen[$1]++){print $1}}' p.txt`; do re=`awk -v i="$i" '$1 == i && $3 == "0" {print i,NR}' p.txt|wc -l`; echo "$i $re"; done
выход
A 2
B 0
awk '{
##use key-value array in awk
if($1 in STORE){
if($3 ==0){
STORE[$1]+=1
} ##if ends for 3rd column check
} ##if ends for A/B check
else{
if($3 ==0){
##check if third column is zero
STORE[$1]=1
}else{
##if not zero, make value as zero
STORE[$1]=0
}
} ##else if A/B not in Store
}
END{
##print everything using for loop
for(key in STORE){
print key, STORE[key]
}
} ' file.txt