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

Awk 从文件中提取列(超过22354列),awk,sed,cut,gawk,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#我有50k个数字要放在f后面 可以将文件剪切三次并粘贴在一起!我在寻找更好的方法。awk-v“LastCol=50000”{ awk -v "LastC

我应该从一个有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
#我有50k个数字要放在
f
后面

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

awk-v“LastCol=50000”{
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
如果(NF>LastCol){ 对于(i=1;i文件.crop

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

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

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

awk -f columnfile < [your input file]
awk-f columnfile<[您的输入文件]

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

例如。
seq-s“150000>myfile.txt

sed-r的//[]+//g;s//\n/g'myfile.txt | sed-n'5545560000p;115000125000P'


注意:
别忘了计算列数,因为现在列是行,所以需要将前面的行号乘以列数

任何示例数据格式?文件内容意味着什么?
awk
perl
似乎能够轻松处理如此大量的列。你用
awk
试过什么吗????问题出在
cut
限制上,而不是在awk上,并且在代码中不经常写入以
$
开头的50K列的命令行。这是awk第一次内存不足!在我的系统上,
awk
实际上是
mawk 1.3
,我得到:
awk:超出程序限制:最大字段数size=32767