объединять файлы с переменными номерами столбцов и строк и на основе 1 поля

204
Elham

Извините заранее, если это слишком элементарно, я новичок. У меня есть два файла (файл1 и файл2). Я хочу посмотреть в file1 столбец 6 и, если он совпадает с записью в столбце 1 файла 2, вывести содержимое этой строки в конец файла 1, чтобы создать новый файл. Ниже показано, как выглядят мои файлы, и как они мне нравятся. Я попробовал ниже, и это не работает, вывод пуст.

sort -k6 file 1 > file1_sorted  sort –k1 file2 > file2_sorted  join -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13 file1_sorted file2_sorted > file3 

Это может быть связано с неправильным объединением или с неправильной сортировкой файла 1, или с тем и другим. Оба файла csv, файл 2 в порядке, но в файле 1, похоже, есть несколько пустых мест после последнего столбца, который, когда я пытаюсь выбрать столбец 6 файла1 через awk ' file 1 >test, не работает ... Я понятия не имею, почему. Я пытался удалить вкладки с помощью sedи т. Д., Но не повезло. Пожалуйста помоги!

Файл 1 (5052 строки, 6 столбцов)

rs28595482,1,1,1953576,ENSG00000187730,GABRD rs2376805,1,1,1956362,ENSG00000187730,GABRD rs2229110,1,1,1957037,ENSG00000187730,GABRD rs3820007,1,1,1957299,ENSG00000187730,GABRD rs28409373,1,1,1959978,ENSG00000187730,GABRD rs2376803,1,1,1967954,NA,GABRD rs11582799,1,1,7832026,ENSG00000269925,VAMP3 

файл 2 (344 строки, 13 столбцов)

GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 ABCG1,21,0,0,0,0,cort,0,0,0,0,0,0 VAMP3,0,0,0,0,0,0,0,0,0,0,0,0 ADAMTS2,0,0,0,0,0,0,0,0,0,0,0,0 ADAMTSL1,9,0,0,0,0,0,oxt,0,0,0,0,rest ADCY7,16,0,0,0,0,cort,0,0,0,0,0,0 

Что я ожидаю получить после некоторой магии (файл 3)

rs28595482,1,1,1953576,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs2376805,1,1,1956362,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs2229110,1,1,1957037,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs3820007,1,1,1957299,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs28409373,1,1,1959978,ENSG00000187730,GABRD,16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs2376803,1,1,1967954,NA,GABRD, 16,0,0,gaba,0,0,oxt,0,0,0,0,0 rs11582799,1,1,7832026,ENSG00000269925, VAMP3,0,0,0,0,0,0,0,0,0,0,0,0 
0
что rs в 5-й строке файла 1 должно быть на следующей строке, не знаю, почему это происходит так. Я попытался отредактировать это, но это показывает то же самое. Elham 7 лет назад 0

1 ответ на вопрос

0
Greg Tarsa

Вы так близко . Что вам нужно сделать, это сказать, joinчто использовать для входного терминатора, в этом случае -t,:

join -t, -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13 file1_sorted file2_sorted > file3 

Кстати, хорошая работа, описывающая проблему и приводящая ваш пример. Это сделало его простым для отладки.

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