Awk 从文件中提取列(超过22354列)
我应该从一个有150k列的文件中提取大约50k列。我尝试了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
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