Этого можно добиться, запустив центральный сервер OpenLDAP и настроив машины на использование сервера LDAP для аутентификации пользователей, а не на локальную аутентификацию учетной записи unix на основе /etc/passwd -.
Я бы оценил уровень навыков, необходимых для правильной работы и устранения возникающих проблем и неполадок, от «среднего -высокого» до «высокого».
Если вы уже являетесь мастером или гуру LDAP или MS ActiveDirectory, все будет просто. Если нет, будьте готовы изучить основные предпосылки -.
Несколько предварительных -условий для реализации входа в систему LDAP с несколькими -машинами:
Должен уметь устанавливать, управлять, настраивать и использовать LDAP.
Возможность устранять неполадки в системах Linux и изолировать общие симптомы до корневой -причины (с ), а затем интегрировать опыт LDAP для выявления и устранения неполадок.
Единая -серверная реализация LDAP для аутентификации unix создает новую единую точку отказа для машин в сети:
Каждый раз, когда сервер LDAP отключается или становится недоступным, невозможно будет войти в систему на Linux-машинах.
General enough to be useful for other linux distros:
pam_ldap- and nss_ldap- oriented resources: (NOTE: no longer best practices [see discussion below], but may still be informative)
datamash
— простой инструмент для этого. Однако нужно убрать пустые строки и уделить немного больше внимания форматированию ввода данных.
sed '/^$/d' infile | datamash -W -g 1,2 unique 3,4
Означает группировку на основе столбцов 1 и 2, затем сворачивает столбцы 3 и 4 в списки, разделенные запятыми, но показывает только уникальные значения. -W
означает использование пробелов (и)(вместо табуляции )в качестве разделителей полей. sed
просто удаляет пустые строки. С вашим входным файлом, который создаст такой вывод:
Sample Cancer Abbrev Mechanism
x Bladder 5,6 deletion,ecDNA
y Osteosarcoma 4,5,6 deletion,ecDNA,transposition
Обратите внимание, что Аббревиатура и Механизм сгруппированы отдельно, и имейте в виду, что они сортируются независимо друг от друга (, т.е. 4
и deletion
идут первыми, где ваш ввод имеет 4
какtransposition
)-это происходит из операции unique
, которая нуждается в сортировке. Для точного вывода, который вы запрашивали, это будет работать:
awk 'BEGIN {OFS="\t"} $0 != "" {print $1,$2,$3" "$4}' infile |
datamash -g 1,2 unique 3
Sample Cancer Abbrev Mechanism
x Bladder 5 deletion,6 ecDNA
y Osteosarcoma 4 transposition,5 deletion,6 ecDNA
Здесь awk
используется для разделения полей табуляцией, но объединяет поля 3 и 4 в одно, просто сохраняя пробел между ними -таким образом, datamash
обрабатывает их как одно целое, так как по умолчанию работает через табуляцию как разделитель. awk
также отсеивает здесь пустые строки.
Использованиеawk
:
Предполагая, что третье и четвертое поля имеют фиксированные значения, т. е. 6
в третьем поле всегда имеет ecDNA
в четвертом поле, это должно работать:
awk 'BEGIN{FS=",";OFS="\t"; printf "Sample\tCancer\tMechanisms\n"}
NF{len=split(ar[$1 OFS $2], a, " ");
for(i=1;i<=len;i++) if (a[i] == $4) $4="";
if ($4) ar[$1 OFS $2]=(ar[$1 OFS $2] ? ar[$1 OFS $2] ", " : "") $3 " " $4}
END{for(j in ar) print j,ar[j]}' input
В приведенной выше команде FS=","
, потому что столбцы разделены запятыми, и OFS="\t"
, потому что нам нужны столбцы, разделенные табуляцией.
Используя Miller , если вы вводите данные в формате CSV, вы можете запустить
mlr --c2t -N nest --implode --values --across-records --nested-fs "," -f 3 then clean-whitespace input.csv
иметь
x Bladder 6 ecDNA,6 ecDNA,5 deletion,5 deletion
y Osteosarcoma 4 transposition,4 transposition,5 deletion,6 ecDNA
Входной файл, который я использовал
x,Bladder,6 ecDNA
x,Bladder,6 ecDNA
x,Bladder,5 deletion
x,Bladder,5 deletion
y,Osteosarcoma,4 transposition
y,Osteosarcoma,4 transposition
y,Osteosarcoma,5 deletion
y,Osteosarcoma,6 ecDNA
Если вам нужны уникальные значения, используйте команду
mlr --c2p -N uniq -a then nest --implode --values --across-records --nested-fs "," -f 3 then clea
n-whitespace input.csv