我应该从一个包含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万个数字。
可以将文件剪切三次并粘贴在一起!我寻找更好的方法。
答案 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:
不要忘记进行列数学运算,因为现在列是行,您需要将前一行数乘以列数。