拆分包含 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 脚本更快。
我想将一个包含 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 脚本更快。