Csv Unix Split函数将文件拆分为多个文件:拆分记录
我需要在FTP之前将文件拆分为多个文件(因为FTP限制为1GB)。我正在使用分割函数来实现这一点Csv Unix Split函数将文件拆分为多个文件:拆分记录,csv,unix,split,Csv,Unix,Split,我需要在FTP之前将文件拆分为多个文件(因为FTP限制为1GB)。我正在使用分割函数来实现这一点 split --bytes=$SPLIT_FILE_SIZE $FILE -d $FILE"_" $SPLIT_FILE_SIZE=900M 现在我注意到它也在打破记录。 此外,记录中的数据中没有任何新行字符 例如 我的原始文件已保存 a|b|c|d|e|f a1|b1|c1|d1|e1|f1 a2|b2|c2|d2|e2|f2 a3|b3|c3|d3|e3|f3 a4|b4|c4|d4|e4|
split --bytes=$SPLIT_FILE_SIZE $FILE -d $FILE"_"
$SPLIT_FILE_SIZE=900M
现在我注意到它也在打破记录。
此外,记录中的数据中没有任何新行字符
例如
我的原始文件已保存
a|b|c|d|e|f
a1|b1|c1|d1|e1|f1
a2|b2|c2|d2|e2|f2
a3|b3|c3|d3|e3|f3
a4|b4|c4|d4|e4|f4
所以我的分割文件是
第一个文件内容:
a|b|c|d|e|f
a1|b1|c1|d1|e1|f1
a2|b2|c2|
第二个文件内容:
d2|e2|f2
a3|b3|c3|d3|e3|f3
a4|b4|c4|d4|e4|f4
感谢您的建议。因为您要求它通过计数字节进行拆分,所以它不在乎拆分点是否在行的中间。相反,获取每行字节数的平均值,添加一些安全裕度并按行分割
split -l=$SPLIT_FILE_LINE $FILE -d $FILE"_"
您可以使用
wc-l$FILENAME
计算文件中的行数。请注意,Mac OS X和FreeBSD发行版没有-d`选项。这可以根据需要添加到中,但在最基本的形式中,只要您处理文本输入,您就可以使用以下内容:
#!/usr/bin/awk -f
BEGIN {
inc=1
}
s > 900*1024*1024 { # 900MB, per your question
inc++
s=0
}
{
s+=length($0)
print > "outfile." inc
}
这将逐行遍历文件,将长度添加到变量中,然后重置变量并增加用作输出文件名的计数器
升级可能包括从命令行选项中获取大小(ARGV[]
),或者在脚本运行时包含某种状态/调试输出。下面是我如何做到的
拆分文件大小=900
行的平均长度=awk'{total+=length($0);count++}END{print total/count}'$FILE
行的r\u平均长度=printf“%.0f\n”“行的$avg\u长度”
文件的最大限制=expr$SPLIT\u文件大小\*1024\*1024
max_line_count=echo$(_file的max_limit_/r_avg_line的长度_))
拆分-l$max\u line\u count$FILE-d$FILE“问题是什么?我如何避免拆分记录而在行末拆分。@Prajakta,提出问题的最佳位置是。
--line
选项在FreeBSD或OSX中不可用。如果您使用的工具或选项只针对一个平台,最好提及哪个平台!我可能不得不做“获取每行的平均字节数”,这将有望解决我的问题。我用的是克朗贝壳。