我有非常大的基因型文件,基本上不可能在 R 中打开,所以我尝试使用 linux 命令行提取感兴趣的行和列。行使用头/尾足够简单,但我很难弄清楚如何处理列。
如果我尝试使用提取(例如)第 100-105 个制表符或空格分隔列
cut -c100-105 myfile >outfile
如果每列中有多个字符的字符串,这显然是行不通的。是否有某种方法可以使用适当的参数修改 cut 以便提取列中的整个字符串,其中列定义为空格或制表符(或任何其他字符)分隔?
我有非常大的基因型文件,基本上不可能在 R 中打开,所以我尝试使用 linux 命令行提取感兴趣的行和列。行使用头/尾足够简单,但我很难弄清楚如何处理列。
如果我尝试使用提取(例如)第 100-105 个制表符或空格分隔列
cut -c100-105 myfile >outfile
如果每列中有多个字符的字符串,这显然是行不通的。是否有某种方法可以使用适当的参数修改 cut 以便提取列中的整个字符串,其中列定义为空格或制表符(或任何其他字符)分隔?
如果该命令应该使用制表符和空格作为分隔符,我会使用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
查看手册页以获取有关 cut 命令的更多信息。
您可以使用 cut 与这样的分隔符:
带空格分隔符:
cut -d " " -f1-100,1000-1005 infile.csv > outfile.csv
带制表符分隔符:
cut -d$'\t' -f1-100,1000-1005 infile.csv > outfile.csv
我给了你 cut 的版本,你可以在其中提取间隔列表......
希望能帮助到你!