拆分文件,包含800,000列

时间:2016-12-06 14:28:35

标签: bash unix awk cut

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

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

infile="$1"
start=$2
end=$3
step=$(($4-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天?!

是否有一种更有效的方法可以将以空格分隔的文件按列分割为更小的块?

1 个答案:

答案 0 :(得分:3)

试试这个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脚本更快。