33

我有非常大的基因型文件,基本上不可能在 R 中打开,所以我尝试使用 linux 命令行提取感兴趣的行和列。行使用头/尾足够简单,但我很难弄清楚如何处理列。

如果我尝试使用提取(例如)第 100-105 个制表符或空格分隔列

 cut -c100-105 myfile >outfile

如果每列中有多个字符的字符串,这显然是行不通的。是否有某种方法可以使用适当的参数修改 cut 以便提取列中的整个字符串,其中列定义为空格或制表符(或任何其他字符)分隔?

4

2 回答 2

36

如果该命令应该使用制表符和空格作为分隔符,我会使用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 命令的更多信息。

于 2013-11-13T16:58:20.210 回答
11

您可以使用 cut 与这样的分隔符:

带空格分隔符:

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

带制表符分隔符:

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

我给了你 cut 的版本,你可以在其中提取间隔列表......

希望能帮助到你!

于 2013-11-13T16:58:32.053 回答