大文件拆分

技能大賽,要求將6g的txt文件進行拆分,而且不能截斷一行的數據。本身沒有作出來,如下是別人的代碼:linux

#include<iostream>
#include <fstream>
#include<string>
#include<stdio.h>
#include<stdlib.h>

using namespace std;
int main( )
{
	double num;
	double lengthnum;
	double linesize;
	string filepath;
	char strsys[100];
	char buffer[512];
  cout << "請輸入拆分文件個數:" << endl;
  cin >> num;
  cout << "請輸入拆分文件名稱:" << endl;
  cin >> filepath;
  ifstream in(filepath.c_str(), ios::in);
  if(!in)
  {
    cout << "文件打開錯誤!" << endl;
    return -1;	
  }
  in.getline (buffer,512);
  linesize = strlen(buffer);
  //cout <<  linesize << endl;
  
  in.seekg(0,ios::end);
  double size_t = in.tellg();
  lengthnum = size_t/num/linesize;
  cout << "拆文件開始!" << endl; 
  sprintf(strsys,"split -l %0.0lf %s outfile",lengthnum,filepath.c_str());
  //cout << strsys << endl;
  system(strsys);
  cout << "拆文件結束!" << endl;      
  
  in.close();
  return 0;	
}

能夠看到最終仍是用到了linux下的split命令。ios

還有大神直接用shell寫了一個腳本:shell

#!/bin/sh
if [ -z "$1" ] || [ -z "$2" ] ; then
    echo "Ussage:fg.sh 文件名 個數"
else
lines=$(awk '{print NR}' $1 | tail -n 1)
mod=$[$lines % $2]
if [ $mod>0 ]; then
line=$[$lines/$2+1]
else
line=$[$lines/$2]
fi
split -$line $1

fi

在想是否有windows版。windows

相關文章
相關標籤/搜索