Я хотел бы попросить о помощи.К сожалению, у меня нет никаких навыков программирования, но мне нужно сделать анализ биоинформатики.Для моего вопроса ниже я уже искал решения через Google, но решения, которые я нашел (даже здесь, в stackoverflow), не решили мою проблему и не могли понять, почему.Поэтому я был бы очень признателен за любую помощь.
Короче говоря: я хотел бы извлечь определенные столбцы из текстового файла на основе списка, который находится в другом файле.Я хотел бы использовать команды терминала.
У меня огромный текстовый файл (data.txt) (2,8 ГБ), который содержит 52000 строк и около 11000 столбцов.Первая строка - это заголовок.
Это выглядит так:
**data.txt**
name GTEX-144GN-2326-SM-5B26N GTEX-145MF-0626-SM-5B47S ...
gene1 33.2 23.2 ...
И у меня есть файл списка (list.txt), в котором есть имена столбцов, которые я хотел быизвлечь из data.txt в новый файл (results.txt):
**list.txt**
GTEX-144GN-2326-SM-5B26N
GTEX-145MF-0626-SM-5B47S
GTEX-13OW5-0126-SM-5BEY3
...
Я попробовал следующее решение от пользователя dogbane: Извлечь столбцы из файла на основе заголовка, выбранного из другого файла Но он сгенерировал файл размером 22 ГБ, который я даже больше не мог открыть.
Тогда я попробовал другое решение:
cols=($(sed '1!d;s/, /\n/g' data.txt | grep -nf list.txt | sed 's/:.*$//'))
cut -d ',' -f 1$(printf ",%s" "${cols[@]}") data.txt > result.txt
Но он дал мне только первый столбец.
Тогда у меня возникла такая же проблема:
head -n1 data.txt | tr '\t' '\n' | grep -nf list.txt | cut -f1 -d: | paste -sd, | xargs -I{} cut -f {} data.txt > results.txt
Я был бы благодарен, если бы кто-нибудь показал мне более простое и работающее решение.Или, по крайней мере, возможно, указав, какую деталь я просмотрел.Вопрос, вероятно, излишний, но решение здесь может быть иным?
РЕДАКТИРОВАТЬ:
Я нашел способ сделать это в R, но он работает только снебольшая таблица / матрица, но она не работает с матрицей 2 ГБ.С небольшой таблицей этот метод работает.
загрузка таблицы с помощью:
table <- read.table("c:/test.txt")
# then converting first row into headers
colnames(table) <- as.character(unlist(table[1,]))
# loading the list file that contains the column names to be extracted from table
list <- scan("c:/list.txt", character(), quote = "")
#Then extracting columns based on names in list:
results <- table[,list]
Однако, когда я пробую этот метод на моей большой матрице 2 ГБ, я получаю сообщение об ошибке:
results <- table[,list]
Error in `[.data.frame`(table, , list) : undefined columns selected
Может кто-нибудь дать представление о том, что может генерировать сообщение об ошибке?
Спасибо за ваше терпение и помощь заранее.