我知道如何在 vi 中删除连续的重复项。任何一个
:%!uniq
Run Code Online (Sandbox Code Playgroud)
或者
:g/^\(.*\)$\n\1$/d).
Run Code Online (Sandbox Code Playgroud)
但是我有一个文件,其中包含随机顺序的数据,并且有一些重复的行分散在整个文件中。如何在不干扰行顺序的情况下删除所有这些重复项?应该保留第一个唯一行,并删除下一个(或其余所有)重复项?
例如 cat 文件 1
Here's looking at you, Kid.
Casablanca
Here's looking at you, Kid.
Go ahead, make my day.
Dirty Harry
sleep 5
Go ahead, make my day.
Yippee-ki-yay
Run Code Online (Sandbox Code Playgroud)
输出应该是:
Here's looking at you, Kid.
Casablanca
Go ahead, make my day.
Dirty Harry
sleep 5
Yippee-ki-yay
Run Code Online (Sandbox Code Playgroud)
有一个 awk liner 非常少:
$ awk '!a[$0]++' file
Here's looking at you, Kid.
Casablanca
Go ahead, make my day.
Dirty Harry
sleep 5
Yippee-ki-yay
Run Code Online (Sandbox Code Playgroud)
它跟踪数组中处理的行a[]。每当该行再次出现时,计数器就已经为正,因此条件为假并且不打印该行。
如果要在 中运行它vim,请执行以下操作:
:%!awk '\!a[$0]++'
^^
you have to escape the ! to be treated properly
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |