AIX - awk 显示每个匹配项的第一次出现

AIX - awk display first occurence of each match

假设我有一个名为 RESULTS.txt 的文件,其中包含以下内容:

SUCCESS JON DOE
SUCCESS JON DOE
SUCCESS JANE DOE
FAILURE JON DOE
FAILURE JANE DOE

我现在需要做的是 'extract' 从包含单词 'SUCCESS' 的每一行中提取姓名(JON DOE 或 JANE DOE)。我用 awk 解决了这个问题: awk '/SUCCESS/ {print }'\; RESULTS.txt 这给了我以下输出:

JON DOE
JON DOE
JANE DOE

名称提取工作正常。我现在的问题是我需要每场比赛,或者在这种情况下每个名字,只需要一次。换句话说:我想要一个产生以下输出的命令:

JON DOE
JANE DOE

我知道一种可能是编写一个脚本,例如,将每个匹配项存储到一个数组中。然后我可以遍历数组搜索在插入新条目之前是否已经有同名条目。

但我正在寻找的是无需使用数组或写入文件即可解决此问题的精益解决方案。

我在 AIX 机器上工作。

感谢任何帮助。

awk 方法:

awk '=="SUCCESS" && !a[,]++{print ,}' RESULTS.txt

输出:

JON DOE
JANE DOE

替代方法使用 sed + uniq 管道:

sed -n 's/SUCCESS \(.*\)//p' RESULTS.txt | uniq

排序 方法:

awk '/SUCCESS/ {print  " " }' RESULTS.txt | sort -ur

输出:

JON DOE
JANE DOE

没有看到阵列,如所要求的:

$ awk 'sub(/^SUCCESS /,"") && [=10=]!=prev{print; prev=[=10=]}' file
JON DOE
JANE DOE