Извлечение столбцов из текстового файла с различными разделителями в Linux

У меня очень большие файлы генотипов, которые в принципе невозможно открыть в R, поэтому я пытаюсь извлечь интересующие строки и столбцы с помощью командной строки linux. Строки достаточно просты, используя head/tail, но мне трудно понять, как обрабатывать столбцы.

Если я попытаюсь извлечь (скажем) 100-105-й вкладку или разделитель с пробелом, используя

 cut -c100-105 myfile >outfile

это, очевидно, не будет работать, если в каждом столбце есть строки из нескольких символов. Есть ли способ изменить вырезание с соответствующими аргументами, чтобы он извлекал всю строку в столбце, где столбцы обозначаются как пробел или табуляция (или любой другой символ)?

Ответы

Ответ 1

Если команда должна работать с табуляцией и пробелами в качестве разделителя, я бы использовал awk:

awk '{print $100,$101,$102,$103,$104,$105}' myfile > outfile

До тех пор, пока вам просто нужно указать 5 полей, просто набрать их будет нормально, для более длинных диапазонов вы можете использовать цикл for:

awk '{for(i=100;i<=105;i++)print $i}' myfile > outfile

Если вы хотите использовать cut, вам нужно использовать опцию -f:

cut -f100-105 myfile > outfile

Если разделитель полей отличается от TAB, его необходимо указать с помощью -d:

cut -d' ' -f100-105 myfile > outfile

Проверьте справочную страницу для получения дополнительной информации о команде вырезания.

Ответ 2

Вы можете использовать разрез с разделителем следующим образом:

с разделителем пространства:

cut -d " " -f1-100,1000-1005 infile.csv > outfile.csv

с вкладкой delim:

cut -d$'\t' -f1-100,1000-1005 infile.csv > outfile.csv

Я дал вам версию разреза, в которой вы можете извлечь список интервалов...

Надеюсь, что это поможет!