【问题标题】:Synchronous files, delete the same data [closed]同步文件,删除相同的数据[关闭]
【发布时间】:2013-07-08 03:43:54
【问题描述】:



我有两个文件
一个.txt

1
2
3

B.txt

1
2
3
4

我想删除同时出现在 A.txt 和 B.txt 中的那些数据。
所以输出应该是:
C.txt

4

c++或linux机器如何做到这一点?

【问题讨论】:

  • sort a.txt b.txt |uniq -u
  • 解决了,非常感谢

标签: c++ linux file sync


【解决方案1】:

您可以通过以下步骤将其存档:

1 加载 A.txt int setA

std::set<std::string> setA;

2 将 B.txt 加载到 setB 中

std::set<std::string> setB;

3 获取 setA 和 setB 到 setC 的交互

setC = set_intersection(setA.begin(), setA.end(),
                        setB.begin(), setB.end(),
                        setC);

4 去掉setA中的常用数据

std::set<std::string> setDA;
set_difference(setA.begin(), setA.end(),
               setC.begin(), setC.end(),
               setDA);

// write content of setDA back to file A

5 对 setB 做同样的事情并写回文件 B

【讨论】:

  • 一个后续问题。如何将数据读取到设置的字符串?我知道一些简单的命令,例如字符串 temp;获取线(文件,临时);但是我可以把整个文件读成一组字符串吗?
  • 如果你知道getline,那么你可以将每一行插入到集合中。
  • @sflee 不客气!
【解决方案2】:

你可以用这个

comm -3 a.txt b.txt

-3 用于抑制出现在两个文件中的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2021-03-04
    • 2011-11-21
    相关资源
    最近更新 更多