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

use*_*498 29 linux

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

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

 cut -c100-105 myfile >outfile
Run Code Online (Sandbox Code Playgroud)

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

hek*_*mgl 31

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

awk '{print $100,$101,$102,$103,$104,$105}' myfile > outfile
Run Code Online (Sandbox Code Playgroud)

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

awk '{for(i=100;i<=105;i++)print $i}' myfile > outfile
Run Code Online (Sandbox Code Playgroud)

你需要cut:

cut -f100-105 myfile > outfile
Run Code Online (Sandbox Code Playgroud)

如果字段分隔符不同,则-f需要使用TAB以下命令指定它:

cut -d' ' -f100-105 myfile > outfile
Run Code Online (Sandbox Code Playgroud)

有关cut命令的更多信息,请查看手册页.


asa*_*lic 11

您可以使用带有分隔符的cut,如下所示:

空间分隔:

cut -d " " -f1-100,1000-1005 infile.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)

使用制表符分隔:

cut -d$'\t' -f1-100,1000-1005 infile.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你!

  • 或者只是'awk'{print $ 1}'`(tab是默认的分隔符) (3认同)
  • 提及`-d $'\ t'`语法的+1.(虽然它不是必需的,因为`TAB`是默认分隔符) (2认同)
  • 或者,您可以使用`awk --field-searator ="\\ t"'{print $ 1}'filename`语法. (2认同)