从文件中提取列(超过22354列)

时间:2015-10-12 10:54:20

标签: awk sed cut gawk

我应该从一个包含150k列的文件中提取大约50k列。我试过了cut。但cut仅支持22354列。

列号位于文件中,我应该从主文件中提取这些列。

文件如下所示:

    .001 .2 0 0 1 2.3456
    1 2 4.567 2.12 0 7
    1 2 1 2 0 1

削减工作但仅适用于第一批22354。

cut -d" " -f2,4#我在f后有5万个数字。

可以将文件剪切三次并粘贴在一起!我寻找更好的方法。

3 个答案:

答案 0 :(得分:1)

awk -v "LastCol=50000" '{
   if (NF > LastCol){
      for( i = 1; i < LastCol; i++) printf "%s%s", $i, FS
      print $LastCol
      }
    else print
   }' File > File.crop

使用150K列(seq -s " " 150000)进行测试并在此处工作

答案 1 :(得分:1)

要绕过任何命令行长度限制(以及任何剪切限制),您可能希望使用awk -f来执行此操作。将列列表放在文件中:

columnfile:
{print [comma-separated list of your column numbers each preceded by "$"]}

然后只是:

awk -f columnfile < [your input file]

答案 2 :(得分:0)

您可以使用sed,我不确定它的限制是什么,但sed可以轻松处理150000列,而且速度很快。在第一遍中,将所有字段分隔符切换为sed的换行符,然后使用-n选项抑制输出并使用sed打印命令p指定列范围

E.g。 seq -s " " 150000 > myfile.txt

sed -r 's/[ ]+/ /g;s/ /\n/g' myfile.txt | sed -n '55455,60000p;115000,125000p'

Note:不要忘记进行列数学运算,因为现在列是行,您需要将前一行数乘以列数。