Чистый awk
:
$ awk -F'[, ]' 'NR==FNR{n[$2]=$1;next}{m[$3]+=n[$1]}
END{for(i in m){print i " " m[i]}}' \
file1 file2
degree1 2
degree2 5
Или вы можете поместить его в скрипт, как это:
#!/usr/bin/awk -f
BEGIN {
FS="[, ]"
}
{
if (NR == FNR) {
n[$2] = $1;
next;
} else {
m[$3] += n[$1];
}
}
END {
for (i in m) {
print i " " m[i];
}
}
Первый набор полевого сепаратора на запятую и пространство (то есть Begin
блок или параметр командной строки
.
затем при расстановке первого файла ( FNR == NR
IDIOM) Укажите ряд подключений для пользователя в массив, индексируемый именем пользователя. При расстановке следующих файлов добавьте количество подключений для каждого пользователя в массив, индексированный группой пользователей [
Наконец (конец конце
блок) Сканируйте весь массив и распечатайте ключ, пары значений.
я думаю, что вы хотите эту команду:
ls -l partition | cut -c5-7 | tr rwx cse |sed 's/-//'
можно удалить одну дополнительную команду (, сокращает-d ''-f 1
), и замените его последней командой сокращения (-c5-7
сокращения) и также добавьте sed 's/-//'
в конце для удаления всего -
с. Теперь вы сделаны. вам не было нужно к добавлению дополнительного |
.
И еще лучше: можно также изменить тире ( -
символ с Нулевым символом ( \0
) как после):
ls -l partition | cut -c5-7 | tr 'rwx-' 'cse\0'
Замененный -
символ с нулевым символом ( \0
).
Альтернативный путь без ls
:
getfacl -c partition | sed -n '/group::/{s/.*:://;y/rwx/cse/;s/-//g;p;}'
Еще одна альтернатива (трубопроводы два TR
команды):
LS -L раздел | Cut -C5-7 |. tr -dc rwx | TR RWX CSE