linux - 获取许多相似字符串中的第一个

标签 linux bash unix sed grep

我有以下形式的字符串

A-XXX
A-YYY
B-NNN
A-ZZZ
B-MMM
C-DDD

但是,我想在连字符之前获取每个字符串的第一次出现。所以这里的解决方案是:

A-XXX
B-NNN
C-DDD

我如何使用 bash 工具来做到这一点?我尝试了 uniq,但我无法在那里设置“相似性模式”。

最佳答案

这就够了吗?

cat uwe
A-XXX
A-YYY
B-NNN
A-ZZZ
B-MMM
C-DDD
$ awk -F'-' '!a[$1]{print $0;a[$1]++}' uwe
A-XXX
B-NNN
C-DDD

编辑:

实际上可以将其缩短为稍微隐晦一点:

$ awk -F'-' '!a[$1]++' uwe
A-XXX
B-NNN
C-DDD

我们所做的是告诉awk - 是字段分隔符; !a[$1] 告诉 awk 执行以下命令(默认情况下不显示任何内容),然后递增检查是否看到值的数组。

关于linux - 获取许多相似字符串中的第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54540329/

相关文章:

linux - shell 脚本 sh 从参数中删除斜杠 (/)

bash - sh 和 Bash 之间的区别

linux - jbd2/sda2-8 的高 io 使用率

java - 将 java linux 进程留给用户或操作系统控制

linux - log4cplus RollingFileAppender 不创建新文件

linux - 变量比较错误

bash - "( doSomething ) || :"的含义

unix - 是否有用于检查 Protocol Buffer 的权威 *nix 命令行工具?

linux grep 模式中未知数量的列

bash - 在命令行选项 linux 中运行命令