返回顶部

收藏

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))&amp;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) &amp;&amp; (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 &amp;sum,char c,Bitset<_N> &amp;a,FILE *&amp;out)  
    {  
        if(c!=' ' &amp;&amp; c!=',' &amp;&amp; c!='\n')  
        {  
            sum=(sum*10+(c-'0'));             
            return ;      
        }  
        else{  
            a.set(sum);//将数据设置到指定位中。  
        }  
        sum = 0;  
    }  

    template<int _N>  
    void get_result(Bitset<_N> &amp;a,FILE *&amp;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 &amp;n)//求数字位数  
    {  
        x &amp;&amp; (n=get_value(x/10,n)+1);  
        return n;  
    }  

    template<int _N>  
    void in_put(Bitset<_N> &amp;a,FILE *&amp;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);  
    }  

标签:c/c++

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. yuer 发表 2018-07-27 08:46:07 coredump之百米之内必有解药
  2. hev 发表 2018-04-28 06:11:38 一个简单、轻量的 Linux 协程实现
  3. hev 发表 2017-10-19 15:56:11 FSH – 助你接入私有网络中的 Linux 终端
  4. gonwan 发表 2015-04-15 08:03:07 Database Access Layer in C++
  5. gonwan 发表 2015-12-28 08:41:13 Basic Usage of Boost MultiIndex Containers
  6. gonwan 发表 2016-01-19 03:37:54 Coroutines in C++/Boost
  7. Haoxiang Li 发表 2017-10-25 20:29:02 MXNet C++ Deployment
  8. yuer 发表 2017-10-20 07:52:47 基于leveldb的持久消息队列SDK
  9. yuer 发表 2017-10-07 07:51:32 c++11完美转发
  10. 博主 发表 2016-09-03 00:00:00 C++编译期类型信息的利用
  11. yuer 发表 2017-09-06 03:03:29 libcurl访问unix socket
  12. yuer 发表 2017-09-07 08:14:58 valgrind检测php扩展的warning

发表评论