【发布时间】:2018-07-20 10:48:14
【问题描述】:
我有一个具有这种模式的文件:
start: 1 elapsed: 1 suite: path.to.class case: method
我想打印suite 和case 值的串联仅出现一次的行的整个值。示例:
输入
start: 1 elapsed: 2 suite: com.path.class case: sampleMethod1
start: 1 elapsed: 2 suite: com.path.class case: sampleMethod2
start: 1 elapsed: 2 suite: com.path.class case: sampleMethod2
start: 1 elapsed: 2 suite: com.path.class case: sampleMethod3
start: 1 elapsed: 2 suite: com.path.class case: sampleMethod3
start: 1 elapsed: 2 suite: com.path.class2 case: sampleMethod1
start: 1 elapsed: 2 suite: com.path.class2 case: sampleMethod1
预期输出
start: 1 elapsed: 2 suite: com.path.class case: sampleMethod1
这与this 问题非常相似,但是,它只打印正在检查相等性的列。我最好的尝试是:
awk '{arr[$6,$8]++} END {for (i in arr) {if (arr[i]==1) {print $0} }}' filename
但它会打印:start: 1 elapsed: 2 suite: com.path.class2 case: sampleMethod1
【问题讨论】:
-
你有什么问题?您要检查的字段显然是
$6和$8。您可以将它们与arr[$6 $8]连接到索引键中,如果您想要它们之间的分隔符,只需添加一个,例如arr[$6 ":" $8] -
如何打印“suite”和“case”列的连接只出现一次的行的整个值
-
在
END块中,$0是文件中的最后一行,因此您更新后的尝试将简单地打印最后一行,与匹配的次数一样多。