我想知道是否可以删除选定模式中除最后一行以外的所有行。这不是那么容易解释,所以我会举个例子。
我有一个内容类似这样的文本文件:
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
我们:
- 使用
tac
反向打印文件(uniq
在这里工作所必需的)。 - 仅根据前 6 个字符的唯一性剔除重复行(从而忽略括号中递增的数字)。仅保留一组重复行的第一行,这就是我们使用
tac
的原因。 - 然后再次反向打印文件,使其按照您想要的顺序排列。
关于c - 只保留重复模式的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21380592/