linux文本去重(Linux下C++读取文件去重的问题)
本文目录
Linux下C++读取文件去重的问题
#include 《fstream》#include 《vector》#include 《string》#include 《algorithm》#include 《iostream》#include 《sstream》class data_t{public: data_t() : val(5){} std::string& operator(int const i){ return val; } std::string const& operator(int const i) const{ return val; }private: std::vector《std::string》 val;};template《int i》struct cmp1{// 用于sort函数 bool operator()(data_t const &a, data_t const &b) const{ return a; }};template《int i》struct cmp2{// 用于unique函数 bool operator()(data_t const &a, data_t const &b) const{ return a; }};int main(){ std::ifstream istr("input.txt"); if (!istr){ std::cerr 《《 "文件打开失败\n"; return __LINE__; } typedef std::vector《data_t》 vector_t; vector_t data; // 读取文件 std::string line; int line_num = 0; while (getline(istr, line)){ ++line_num; data_t tmp_data; std::istringstream tmp_str(line); int i = 0; for (; i != 5; ++i){ if (!getline(tmp_str, tmp_data, ’\t’)){ std::cerr 《《 "在第" 《《 line_num 《《 "行发生错误\n"; } } if (i == 5){// 该行读取成功 data.push_back(tmp_data); } } // 按关键字1去重 std::sort(data.begin(), data.end(), cmp1《0》()); vector_t::iterator last = std::unique(data.begin(), data.end(), cmp2《0》()); // 按关键字2去重 std::sort(data.begin(), last, cmp1《1》()); last = std::unique(data.begin(), last, cmp2《1》()); data.erase(last, data.end()); // 输出到另一个文件 std::ofstream ostr("output.txt"); if (!ostr){ std::cerr 《《 "文件打开失败\n"; return __LINE__; } for (int i = 0; i != data.size(); ++i){ for (int j = 0; j != 5; ++j){ ostr 《《 data 《《 "\t"; } ostr 《《 "\n"; } return 0;}
输入文件为input.txt,样例:
111 222 333 444 555111 222 333 444 5551111 222 333 444 5551111 222 333 444 55511111 222 333 444 55511111 222 333 444 555输出到output.txt,样例:111 222 333 444 555
linux命令对某一列去重/统计
cat file.csv | awk -F ’\t’ ’{print $2}’ ’\t’指的是file.csv不同列以’\t’分割,如果的是以其他符号分割,换成其她符号; ’{print $2}’是指取第2列,此处从1开始计数,第1列,第2列; 一般去重之前要进行排序 cat file.csv | awk -F ’\t’ ’{print $2}’ | sort | uniq 前半部分与命令1一样,后面加上| sort | uniq 比如通过命令2发现,第2列取值有两种,分别是’neg’和‘pos’,那么我想知道有多少行的第2列取值为’pos’,多少行的第2列取值为’neg’。 cat file.csv | awk -F ’\t’ ’{print $2}’ | grep -o ’neg’| wc -l 前半部分与命令1一样,后面加上 | grep -o ’neg’| wc -l grep -o ’neg’就是取出取值为’neg’的行 wc -l 是计数有多少行
Linux json文件(排序|去重)
文件 test.log json文件数据 根据 data.ext.uid 字段排序 使用 jq 去重数据,并只显示 data.ext.uid 字段 多维度去重
linux去重不要排序
写个脚本来做就是了. ruby, awk都成
awk ’{if(!($0 in a)){print $0};a;}’
更多文章:
免费迅雷会员激活码(求一个迅雷会员激活码 一天的都行 体验码也可以 就用一天)
2024年6月21日 08:01
win10最适合打游戏的版本(win10玩梦幻哪个版本兼容)
2024年8月30日 06:55
极品飞车18手机版(极品飞车18 怎么玩 怎样才能得到好车 我怎么跑也不解锁车啊)
2024年6月28日 05:24
机器学习 为什么会使用梯度下降法?2、牛顿法和最速下降法只能求解无约束优化,有约束的非线性规划有哪些求解方法
2024年7月24日 12:18