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
假设我有一个名为 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