Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将大文件拆分为具有一定数量记录的较小文件(awk、unix)_Unix_Awk_Split - Fatal编程技术网

将大文件拆分为具有一定数量记录的较小文件(awk、unix)

将大文件拆分为具有一定数量记录的较小文件(awk、unix),unix,awk,split,Unix,Awk,Split,我正在尝试将一个大文件(>30000条记录)拆分为多个文件,每个文件包含=4000&NR答案,基于此。。。不过,可能有些元素我并不真正需要 创建程序parse.awk BEGIN { RS=">" } NF {printf("%s", d $0) > "file" i ".txt"}(NR)%n == 0 {close("file" i ".txt") i++} {d = RT} 然后运行: gawk -f parse.awk n=4000 proteins.txt 你可以用FN

我正在尝试将一个大文件(>30000条记录)拆分为多个文件,每个文件包含=4000&NR答案,基于此。。。不过,可能有些元素我并不真正需要

创建程序
parse.awk

BEGIN { RS=">" } NF {printf("%s", d $0) > "file" i ".txt"}(NR)%n == 0 {close("file" i ".txt") i++} {d = RT}
然后运行:

gawk -f parse.awk n=4000 proteins.txt

你可以用FNR做数学运算,比如:

awk  'BEGIN{RS="\n[ \t]*>"; bl=4000}
                    FNR==1{sub(/^[ \t]*>/,"")}
                    {printf ">%s\n", $0 > "file" int(FNR / bl) }
                    ' file

这将在
file0 file1 file2
等中将文件分成
bl
长度记录块。

1600+QA当您搜索
[awk]分割文件时
。当然,这个问题已经被回答了多次。祝你好运。不是按记录编号拆分。。。大量关于按行数拆分的信息。我的记录是多行的。将继续查看。为什么不执行
head-10 myProblematicDataFile | awk'-v RS=“>”{print NR”\t“$0}”
您应该获得前10条记录。您似乎已经知道如何使用
RS
。但我真的建议您返回源数据并正确配置它,以便每个记录输出1行数据,或者使用
sed
脚本将每个2行部分预连接到单个记录中,然后处理拆分。祝你好运。谢谢,我接受了你的建议,直接通过stackoverflow搜索结果,而不是谷歌。我在上面找到了答案。每条记录总是两行吗?
BEGIN { RS=">" } NF {printf("%s", d $0) > "file" i ".txt"}(NR)%n == 0 {close("file" i ".txt") i++} {d = RT}
gawk -f parse.awk n=4000 proteins.txt
awk  'BEGIN{RS="\n[ \t]*>"; bl=4000}
                    FNR==1{sub(/^[ \t]*>/,"")}
                    {printf ">%s\n", $0 > "file" int(FNR / bl) }
                    ' file