У меня есть два отдельных файла, каждый из которых содержит разное количество столбцов, которые я хочу объединить на основе данных в нескольких столбцах.
file1
VMNF01000015.1 1769465 1769675 . . - Focub_II5_mimp_1
VMNF01000014.1 3225875 3226081 . . + Focub_II5_mimp_1
VMNF01000014.1 3226046 3226081 . . - Focub_II5_mimp_1
VMNF01000014.1 3585246 3585281 . . - Focub_II5_mimp_1
VMNF01000014.1 3692468 3692503 . . - Focub_II5_mimp_1
VMNF01000014.1 3715380 3715415 . . + Focub_II5_mimp_1
VMNF01000014.1 2872478 2872511 . . - Focub_II5_mimp_1
file2
VMNF01000014.1 3225875-3226081(+) gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3226046-3226081(-) tacacacctgcgaatactttttgcatcccactgta
VMNF01000015.1 1769465-1769675(-) gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3692468-3692503(-) tacagtgggatgcaaaaagtattcgcaggtgt
VMNF01000014.1 3715380-3715415(+) gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3585246-3585281(-) tacagtgggatgcaaaaagtattcgcaggtgt
VMNF01000014.1 2872478-2872511(-) gtacttcagcctggattcaaacttattgcatcccactgta
Во-первых, я думаю, мне нужно создать еще 2 столбца в file2, разделив числа на "-" и создав новый столбец для "(*)", но я не могу понять, как разделить числа без замены "(-)" тоже. До сих пор я использовал эту команду:
awk '{gsub("-","\t",$2);print;}'
Как только это будет сделано, я хотел бы добавить последний столбец в file2 в file1. Я смог сделать это с помощью следующей команды:
awk 'NR==FNR {a[$1]=$3; next} {print $1,$2,$3,$4,$5,$6,$7,a[$1];}' file2 file1 > file3.
Однако данные не совпадают. Он сопоставляется на основе записи в столбце 1. Во многих случаях данные в столбце 1 совпадают, поэтому данные в столбце 8 файла3 соответствуют только одной из записей и не соответствуют данным в столбце 2 или 3. в файле1, например,
файл3:
VMNF01000015.1 1769465 1769675 . . - Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3225875 3226081 . . + Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3226046 3226081 . . - Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3585246 3585281 . . - Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3692468 3692503 . . - Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 3715380 3715415 . . + Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
VMNF01000014.1 2872478 2872511 . . - Focub_II5_mimp_1 gtacttcagcctggattcaaacttattgcatcccactgta
Даже если бы мне удалось разделить данные в столбце 2 файла2, у меня все равно была бы та же проблема, что и в данных в столбце 2. то же самое в некоторых случаях. Мне нужен код, который говорит что-то вроде: разделить данные в столбце 2 (см. Ниже);
VMNF01000014.1 3225875 3226081 (+) gtacttcagcctggattcaaacttattgcatcccactgta
затем:
если $ 1, $ 2, $ 3 в файле1 соответствуют $ 1, $ 2, $ 3 в файле2, выведите $ 1, $ 2, $ 3, $ 4, 5, $ 6, $ 7 из файла1 и добавьте 5 долларов от file2.
Как я могу это сделать? Я знаю, что awk может использовать операторы if, но я не знаю, как их использовать в awk.
Есть совет?