C++对文本里面的大量数据进行排序(shell,c++,fopen,awk,sed)

#/bin/bash
#对文本里面的数据进行排序
awk 'BEGIN{
	RS=","
}
{print $0}
END{
}'<a | sort -n | sed '/^$/ d' | awk 'BEGIN{
	RS="\n";ORS=","
}
{print $0}
END{
}'|sed 's/,$//g'

下面是c++版本的。
----------------------------------------------------------------------

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

template<int _N>
class Bitset
{
	public:
	Bitset()
	{
			_Tidy();//调用_Tidy()函数会初始化所有位为0.
	}
	void Show()//显示01位.
	{
		for(int _I=0;_I<_N;_I++)
		{
			cout<<(test(_I)?'1':'0');
		}
	}
	bool test(int _P)//测试该位置是否为真(1).
	{
		int _I = _P/32;
		return (A[_I]>>(_P%32))&0x1;
	}
	void _Tidy()
	{
		for(int _I=0;_I<_W;_I++)
		{
			A[_I] = 0;
		}
	}
	void set(int _P)//将_p下标设置为1.
	{
		int _I = _P/32;
		A[_I] |= (0x1<<(_P%32));
	}
	void printf()
	{
		for(int _I=0;_I<_N;_I++)
		{
			test(_I) && (cout<<_I<<"  ");
		}
	}//打印排列结果.
	private:
  typedef long LONG;//以long的4个字节为一个单位数组.
	enum{_Nw=(_N-1)/(sizeof(LONG)*8),
				_W=_Nw+1};
	int A[_W];
};
template<int _N>
void deal_what(int &sum,char c,Bitset<_N> &a,FILE *&out)
{
	if(c!=' ' && c!=',' && c!='\n')
	{
		sum=(sum*10+(c-'0'));
		return ;
	}
	else{
		a.set(sum);//将数据设置到指定位中。
	}
	sum = 0;
}

template<int _N>
void get_result(Bitset<_N> &a,FILE *&out)
{
	int sum = 0;
	while(1)
	{
		char c = fgetc(out);
		if(c==EOF)
		{
			return;
		}
		deal_what<_N>(sum,c,a,out);
	}
}

int get_value(int x,int &n)//求数字位数
{
	x && (n=get_value(x/10,n)+1);
	return n;
}

template<int _N>
void in_put(Bitset<_N> &a,FILE *&in)//往文件b里面写入结果。
{
	for(int _I=0;_I<_N;_I++)
	{
		if(a.test(_I))
		{
			int _H=_I;
			int _K = 0;
			get_value(_H,_K);
			int flog = _K;
			int save=0;
			while(1)
			{
			 int sum=1;
			 for(int _J=_K;_J>0;_J--)
			 {
				sum*=10;
			 }
			 char c = ((_H-save*sum)/(sum/10))+'0';
			 save = _H/(sum/10);
			 fputc(c,in) ;
			 flog--;
			 _K--;
			 if(flog==0)
					break;
			}
	  	fputc(' ',in);
			}
		}
}
int main()
{
	FILE *out = fopen("a","a+");
	FILE *in = fopen("b","a+");
  Bitset<100> a;
	get_result(a,out);
	in_put(a,in);
	fclose(out);
	fclose(in);
}

时间: 2024-11-13 03:31:59

C++对文本里面的大量数据进行排序(shell,c++,fopen,awk,sed)的相关文章

Hadoop基础---MapReduce对数据进行排序

承接上文:Hadoop基础---流量求和MapReduce程序及自定义数据类型 一:实验数据 对上一篇文章中的数据进行排序处理: 13480253104 180 200 380 13502468823 102 7335 7437 13560439658 5892 400 6292 13600217502 186852 200 187052 13602846565 12 1938 1950 13660577991 9 6960 6969 13719199419 0 200 200 13726230

Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现

Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssql 的实现 NEWID() 跟rand()  1 5. newid()与rand()的区别 2 6. NEWID() 2 7. 参考 2 1. 应用场景 并发测试 2. 随机抽取数据原理 原理是 循环所有的ID/记录,附加随机函数字段,然后排序as 这个字段.. 3. 常用的实现方法:::数据库随机

miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题

最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid" class="mini-datagrid" style="width: 100%; height: 100%; border:0;" url="${ctx}/tAXINFO/queryRepeat" autoload="tru

DefaultView 的作用(对DataSet查询出的来数据进行排序)

DefaultView 的作用 收藏    一直以来在对数据进行排序, 条件查询都是直接重复构建SQL来进行, 在查询次数和数据量不多的情况下倒没觉得什么, 但慢慢得, 当程序需要对大量数据椐不同条件进行多次查廛或排序时, 使用这种方式显然对程序的性能影响将会是十分明显的, 在网上找了一下, 发现DATAVIEW能很好的解决这个问题, 其提供了一种简单直观的方式来操作数据, 如下面代码: SqlConnection conn = new SqlConnection("server=.;datab

多线程对800万个数据进行排序

分8个线程对800万个数据分别排序,等所有线程排完序之后,进行简单的多路归并.这和外排的多路归并是一样的,也可以使用优化的胜者树算法. #include <iostream> #include <stdlib.h> #include <pthread.h> #include <limits.h> #include <sys/time.h> using namespace std; #define NTHR 8 /* number of threa

如何从键盘录入数据调用排序算法排序?

如何从键盘录入数据调用排序算法排序? |--如何从键盘录入数据 |--如何用冒泡法排序 源代码如下(详细的注释如下): import java.util.ArrayList; import java.util.Scanner; //  定义键盘输入数据类 public class KeyboardInputData { public static void main(String[] args) { //提示从控制台输入数据,因为while(Scanner.hasNext())无法跳出循环,所以

java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

/*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返回值有:负数,零,正数.分别表示小于,等于,大于 * 对于存入自定义的对象元素,要重写元素的compareTo(Object obj)方法 * 元素定义时,需要实现Comparable接口 * */ 1 import java.util.Iterator; 2 import java.util.Tr

Oracle笔记(四) 简单查询、限定查询、数据的排序

Oracle笔记(四) 简单查询.限定查询.数据的排序 一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言. Oracle数据库之所以发展的很好,主要也是因为Oracle是全世界最早采用SQL语句的数据库产品. SQL功能强大,概括起来,它可以分成以下几组: DML(Data Manipulation La

mysql存取大文本text和批处理数据

public class ReadWriteBigData { /* create database bigdata; use bigdata; create table bigdata //创建表 ( id varchar(20)primary key, pinglun text,(大数据) image blob(二进制) );*/ public void insert() { try{ Connection con=DBHelper.getConnection(); String sql="