Intereting Posts
Получить последнюю часть строки после дефиса Linux: Total swap used = swap, используемый процессами +? Перечислите папки размером более 10G и отправьте их соответствующим владельцам об использовании Не удается подключиться через sshfs, потому что неправильная конфигурация в файле ~ / .ssh / config Хранение файлов в репозитории git, которые должны быть владельцами root в контейнере докеров openSUSE: переключение с Wicked на NetworkManager с помощью командной строки Как отключить горизонтальную прокрутку nemo «Текущее» окно терминала на команду shell / executable? telnet – «Соединение закрыто иностранным хостом» Как grub2 находит свой файл конфигурации в загрузке EFI? Разделение / загрузка раздела на Linux Mint Как установить режим vi _while_ уже набрав команду? Почему Debian зависает после DHCP? Серийный номер USB, не показанный с помощью команды lsusb -v Как я могу создать свою собственную панель выполнения в Конки?

Parse, Manipulate Data В linux / Unix

Я хочу иметь точно такой же вывод в этом сообщении ( Извлеките данные в linux / unix выше, но у меня есть новый входной файл, который ниже:

ABCB11 4 ACE 11 ABCB11 4 CHRM1 114 ABCB11 4 CHRM2 115 ABCB11 4 DRD2 158 ABCB11 4 EGF 164 ABCC8 5 ACE 11 ABCC8 5 ADRA1A 21 ABCC8 5 ADRA1B 22 ABCC8 5 ADRA1D 23 ABCC8 5 CHRM1 114 

Принимая все уникальные гены и создавая выход.

Я хочу, чтобы все строки имели fromid, после того, как взяли отличные значения от обоих. Точный результат – это то, что я хочу ниже:

 ABCB11 = fromid=4,from=ABCB11 ABCC8 = fromid=5,from=ABCC8 ACE = fromid=11,from=ACE CHRM1 = fromid=114,from=CHRM1 CHRM2 = fromid=115,from=CHRM2 DRD2 = fromid=158,from=DRD2 EGF = fromid=164,from=EGF ADRA1A = fromid=21,from=ADRA1A ADRA1B = fromid=22,from=ADRA1B ADRA1D = fromid=23,from=ADRA1D 

Предполагая 4 столбца, двухпроходное решение

 awk 'NR == FNR {if (s[$1]++ == 0) {printf "%s = fromid=%s, from=%s\n", $1, $2, $1}; next}; !s[$3]++{printf "%s = fromid=%s, from=%s\n", $3, $4, $3}' file file ABCB11 = fromid=4, from=ABCB11 ABCC8 = fromid=5, from=ABCC8 ACE = fromid=11, from=ACE CHRM1 = fromid=114, from=CHRM1 CHRM2 = fromid=115, from=CHRM2 DRD2 = fromid=158, from=DRD2 EGF = fromid=164, from=EGF ADRA1A = fromid=21, from=ADRA1A ADRA1B = fromid=22, from=ADRA1B ADRA1D = fromid=23, from=ADRA1D 

Если вы не возражаете против порядка вывода:

 $ awk '!($1 in a){a[$1] = $2} !($3 in a){a[$3] = $4} END { for(i in a) { print i" = fromid="a[i]",from="i } }' file EGF = fromid=164,from=EGF CHRM1 = fromid=114,from=CHRM1 CHRM2 = fromid=115,from=CHRM2 ACE = fromid=11,from=ACE ADRA1A = fromid=21,from=ADRA1A DRD2 = fromid=158,from=DRD2 ABCB11 = fromid=4,from=ABCB11 ADRA1B = fromid=22,from=ADRA1B ABCC8 = fromid=5,from=ABCC8 ADRA1D = fromid=23,from=ADRA1D