拆分包含 800,000 列的文件

Split file with 800,000 columns

我想将一个包含 800,000 列和 40,000 行的基因组数据文件拆分为一系列文件,每个文件包含 100 列,总大小为 118GB。

我目前运行以下bash脚本,多线程15次:

infile=""
start=
end=
step=$((-1))

for((curr=$start, start=$start, end=$end; curr+step <= end; curr+=step+1)); do
  cut -f$curr-$((curr+step)) "$infile" > "${infile}.$curr" -d' '
done

不过以目前脚本的进度来看,分裂需要300天?!

是否有更有效的方法将 space 分隔的文件按列拆分成更小的块?

试试这个 awk 脚本:

awk -v cols=100 '{ 
     f = 1 
     for (i = 1; i <= NF; i++) {
       printf "%s%s", $i, (i % cols && i < NF ? OFS : ORS) > (FILENAME "." f)
       f=int(i/cols)+1
     }
  }' largefile

我希望它比问题中的 shell 脚本更快。