假设我有一个名为RESULTS.txt的文件,其中包含以下内容:
SUCCESS JON DOE
SUCCESS JON DOE
SUCCESS JANE DOE
FAILURE JON DOE
FAILURE JANE DOE
我现在需要做的是从包含“SUCCESS”一词的每一行中“提取”名称(JON DOE或JANE DOE)。我用awk想出来了:
awk '/SUCCESS/ {print $2 $3}'\; RESULTS.txt
这给了我以下输出:
JON DOE
JON DOE
JANE DOE
提取名称的工作正常。我现在的问题是我需要每个匹配,或者在这个上下文中每个名称,只需要一次。换句话说:我想要一个产生以下输出的命令:
JON DOE
JANE DOE
我知道一种可能性是编写脚本,例如,将每个匹配存储到一个数组中。然后我可以循环遍历数组搜索,如果已经有一个具有相同名称的条目,则在插入新条目之前。
但我正在寻找的是一种精益求解的解决方案来解决这个问题,而无需使用数组或写入文件。
我正在使用AIX机器。
任何帮助表示感谢。
答案 0 :(得分:1)
awk 方法:
awk '$1=="SUCCESS" && !a[$2,$3]++{print $2,$3}' RESULTS.txt
输出:
JON DOE
JANE DOE
使用 sed + uniq 管道的替代方法:
sed -n 's/SUCCESS \(.*\)/\1/p' RESULTS.txt | uniq
答案 1 :(得分:0)
排序 方法:
awk '/SUCCESS/ {print $2 " " $3}' RESULTS.txt | sort -ur
输出:
JON DOE
JANE DOE
答案 2 :(得分:0)
根据要求,看不到阵列:
$ awk 'sub(/^SUCCESS /,"") && $0!=prev{print; prev=$0}' file
JON DOE
JANE DOE