Объединение разных терминов в третьем столбце в одну строку согласно образцу кода

Этого можно добиться, запустив центральный сервер OpenLDAP и настроив машины на использование сервера LDAP для аутентификации пользователей, а не на локальную аутентификацию учетной записи unix на основе /etc/passwd -.

Я бы оценил уровень навыков, необходимых для правильной работы и устранения возникающих проблем и неполадок, от «среднего -высокого» до «высокого».

Если вы уже являетесь мастером или гуру LDAP или MS ActiveDirectory, все будет просто. Если нет, будьте готовы изучить основные предпосылки -.

Несколько предварительных -условий для реализации входа в систему LDAP с несколькими -машинами:

  1. Должен уметь устанавливать, управлять, настраивать и использовать LDAP.

  2. Возможность устранять неполадки в системах 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)

-1
27.06.2021, 00:00
3 ответа

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также отсеивает здесь пустые строки.

1
28.07.2021, 11:22

Использование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", потому что нам нужны столбцы, разделенные табуляцией.

0
28.07.2021, 11:22

Используя 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
0
28.07.2021, 11:22

Теги

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