从Linux中的文本文件中提取列(空格或制表符分隔)

时间:2013-11-13 16:55:06

标签: linux

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

如果我尝试使用

提取(比方说)100-105个制表符或空格分隔的列
 cut -c100-105 myfile >outfile

如果每列中有多个字符串,这显然不起作用。有没有办法用适当的参数修改cut,以便它提取列中的整个字符串,其中列被定义为空格或制表符(或任何其他字符)分隔?

2 个答案:

答案 0 :(得分:29)

如果命令应该同时使用制表符和空格作为分隔符,我会使用awk

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

只要你只需要指定5个字段就可以输入它们,对于更长的范围你可以使用for循环:

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

您需要-f

cut -f100-105 myfile > outfile

如果字段分隔符与TAB不同,则需要使用-d指定字段分隔符:

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

检查the man page以获取有关cut命令的更多信息。

答案 1 :(得分:11)

你可以使用带有这样的分隔符的剪切:

with space delim:

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

with tab delim:

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

我给你剪切版本,你可以在其中提取间隔列表......

希望它有所帮助!