Intereting Posts
linux pgrep, исключив конкретного пользователя apt-get имеет неудовлетворенные зависимости, но apt-get -f install не решает проблему Изменение перезагрузки имени хоста возвращается к оригиналу Создание файла csv Ручная настройка или поставщик WPA для Wi-Fi в университетской сети Могу ли я установить ubuntu на образ Virtualbox и использовать его где угодно? Звуковой iTunes Linux Заменить с помощью VIM, повторно использовать часть шаблона поиска Каковы наиболее надежные инструменты командной строки wifi? iw vs wpa_cli vs nmcli Существует ли идентификатор PID для каждого сервиса tomcat? Если он существует, можно ли найти имя службы из этого PID текущей службы tomcat? Как получить доступ к моей учетной записи администратора Windows из Linux? Как я могу использовать fdisk для создания раздела ntfs на / dev / sdx? Как записать файл в другой Linux Mint 15 Не обнаруживает Windows с update-grub У моего дистрибутива есть etags, символически привязанные к ctags, но где я могу получить оригинальные etags?

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