03-工具篇-将一个大日志拆分成多个小日志

notepad++看日志特别方便,并且搜索快,其正则表达式搜索方式特别好用。但是这个日志查看工具有一个缺点,就是打不开大的日志文件。
比如我有一个接近2G的日志文件 ,这个软件就完成打不开了。
为了解决大文件问题,我专门写了一个小工具,用于将一个大的日志文件拆分成多几小的日志文件,每一个文件200M,解决日志打不开的麻烦。
源码如下:

#include 
#include 

int main()
{
	char tmp[1024] = {0};
	unsigned int stop = 0;
	unsigned int file_idx = 0;
	unsigned int file_cnt = 0;
	unsigned int file_size = 200*1024; //200MB
	FILE* fin = fopen("./input.log", "rb");
	FILE*  fout = NULL;
	char out_file[64] = {0};
	if(NULL == fin)
	{
		printf("把要拆分的文件重命名为 input.log->同时放在本地目录\n");
		return 0;
	}
	
	while(!stop)
	{
		int len = fread(tmp, 1, sizeof(tmp), fin);
		if(len != sizeof(tmp))
		{
			stop = 1;
		}
		
		if(0 == (file_cnt%file_size))
		{
			if(NULL != fout)
			{
				fclose(fout);
				fout = NULL;
			}
			file_idx = file_cnt/file_size;
			memset(out_file, 0, sizeof(out_file));
			sprintf(out_file, "out_%d.log", file_idx);
			fout = fopen(out_file, "wb");
			if(NULL == fout)
			{
				printf("打开 %s 错误\n", out_file);
			}
		}
		fwrite(tmp, 1, len, fout);
		
		file_cnt = file_cnt+1;
	}
	
	if(NULL != fout)
	{
		fclose(fout);
		fout = NULL;
	}
	
	if(NULL != fin)
	{
		fclose(fin);
		fin = NULL;
	}		

	
	return 0;
}

编译:
gcc exchange_file.c -o exchange_file
使用:
(1)把要拆分的文件重命名为 input.log->同时放在本地目录
(2)
./exchange_file

你可能感兴趣的:(工具篇,linux)