Извлечение столбцов из текстового файла с различными разделителями в 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
Я дал вам версию разреза, в которой вы можете извлечь список интервалов...
Надеюсь, что это поможет!