c - 只保留重复模式的最后一行

标签 c ubuntu text lines

我想知道是否可以删除选定模式中除最后一行以外的所有行。这不是那么容易解释,所以我会举个例子。

我有一个内容类似这样的文本文件:

A sent (1)
A received (1)
B sent (1)
B sent (2)
B sent (3)
B received (1)

我想在“已发送”和“已接收”消息之间交替,其中“已发送”消息是具有相同字母的已发送消息之间的最后一条消息。所以我需要这样的输出:

A sent (1)
A received (1)
B sent (3)
B received (1)

是否有一些程序可以做这样的事情?如果需要,我可以使用 Ubuntu 或 Windows,或者构建一个简单的 C/C++ 应用程序。

最佳答案

这里有一个简单的方法:

tac FILE | uniq -w 6 | tac

我们:

  1. 使用 tac 反向打印文件(uniq 在这里工作所必需的)。
  2. 仅根据前 6 个字符的唯一性剔除重复行(从而忽略括号中递增的数字)。仅保留一组重复行的第一行,这就是我们使用 tac 的原因。
  3. 然后再次反向打印文件,使其按照您想要的顺序排列。

关于c - 只保留重复模式的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21380592/

相关文章:

c - 嵌套的 printf 语句工作

c - #define values 的最大值/最小值

java - Android Studio 仅在 Ubuntu 上以控制台模式运行

javascript - 如何在 Raphael SVG 中定位一个集合?

php - 如何强制换行?

c - Polyspace 警告不转发声明 main()

c - 是否可以将这种无锁的 32 位哈希表算法用于 64 位 key ?

sql - 如何在postgresql中删除一个表

linux - 消耗带宽

css - 将文本放在图像 slider 上?