Есть ли способ проанализировать несколько строк в одну строку, объединяя дубликаты и вкладки недубликатов? - PullRequest
1 голос
/ 10 апреля 2019

У меня проблемы с форматированием списка следующим образом:

Проблема:

XYZ gene1
XYZ gene2
GHE ATG01
GHE ATG02

Цель (разделенные табуляцией пробелы):

XYZ gene1 gene2
GHE ATG01 ATG02

Я пробовал команды ruby -F -ane '$F[1].split(/\t/).each {|x|print [$F [0],x,$F[2]]*"\t", xargs и paste, но затем застрял, пытаясь понять, как это будет работать, и что команда ruby ​​должна создавать несколько строк, а не одну строку. Я также новичок в обработке текста в командной строке.

Это то, с чем я на самом деле имею дело (и некоторые другие):

14-3-3 proteins AT1G22300
14-3-3 proteins AT1G26480
14-3-3 proteins AT1G34760
14-3-3 proteins AT1G35160
ZIK subfamily AT1G64630
ZIK subfamily AT3G04910
ZIK subfamily AT3G18750

И я хочу получить это:

14-3-3 proteins AT1G22300 AT1G26480 AT1G34760 AT1G35160
ZIK subfamily AT1G64630 AT3G04910 AT3G18750

Вот что я получаю:

xargs -a <some_file> | sed 's/ /,/g'
14-3-3,proteins,AT1G22300,14-3-3,proteins,AT1G26480,14-3-3,proteins,AT1G34760,14-3-3,proteins,AT1G35160,14-3-3,proteins,AT1G78220,14-3-3,proteins,AT1G78300,14-3-3,proteins,AT2G42590,14-3-3,proteins,AT3G02520,14-3-3,proteins

1 Ответ

1 голос
/ 11 апреля 2019

с мельником (https://github.com/johnkerl/miller/releases/tag/5.4.0)

mlr --nidx --ofs "\t" nest --nested-fs " " --implode --values --across-records -f 3 input.csv

У вас есть (табуляция как разделитель полей, пробел как разделитель полей для вложенных значений)

14-3-3  proteins        AT1G22300 AT1G26480 AT1G34760 AT1G35160
ZIK     subfamily       AT1G64630 AT3G04910 AT3G18750

В качестве ввода я использовал этот (разделенный пробелом)

14-3-3 proteins AT1G22300
14-3-3 proteins AT1G26480
14-3-3 proteins AT1G34760
14-3-3 proteins AT1G35160
ZIK subfamily AT1G64630
ZIK subfamily AT3G04910
ZIK subfamily AT3G18750
...