我正在以下文件中寻求帮助。 第 1 列中的客户端可以属于一个或多个组。 它们的状态可以是失败、成功或中断。 我只想要那些没有成功进入的客户。
示例
我的文件如下
RBCSREXC04 AUTO_RERUN_RBC_DAILY succeeded
RBCSRTM03 AUTO_RERUN_RBC_DAILY succeeded
RBCVMAPPPROD01 AUTO_RERUN_RBC_DAILY succeeded
RBCVVMAPPDEV02 AUTO_RERUN_RBC_DAILY succeeded
E6-RBC-SQL-06 AUTO_RERUN_RBC_DAILY succeeded
E6-ODI-Prod-01 AUTO_RERUN_RBC_DAILY succeeded
GSIERBC2004 AUTO_RERUN_RBC_DAILY succeeded
GSIERBC3008 AUTO_RERUN_RBC_DAILY succeeded
RBCSRTM03 D_RBC_VM_DUBLIN_E6 failed
RBCSREXC04 D_RBC_VM_DUBLIN_E6 failed
GSIERBC3008 D_RBC_VM_DUBLIN_E6_1 interrupted
E6-ODI-Prod-01 D_RBC_VM_DUBLIN_E6_1 failed
RBCVVMAPPDEV02 D_RBC_VM_DUBLIN_E6_1 failed
E6-RBC-SQL-06 D_RBC_VM_DUBLIN_E6 failed
RBCVMAPPPROD01 D_RBC_VM_DUBLIN_E6 failed
RBCSRCV01 D_RBC_VM_DUBLIN_E6 failed
以下是预期输出
RBCSRCV01 D_RBC_VM_DUBLIN_E6 failed
最佳答案
您可以使用awk
维护两个数组,分别表示“好”和“坏”条目,其中数组索引是第一列,并且仅打印“坏”条目,其中没有条目“好”数组存在。
awk '
$3=="succeeded"{ good[$1] } # we only need the index here
$3=="failed" || $3=="interrupted"{
if ($1 in bad){
bad[$1]=bad[$1] ORS $0 # append this line to existing entry
} else {
bad[$1]=$0 # save the line
}
}
END{
for (i in bad)
if (!(i in good))print bad[i]
}
' file
关于shell - 在 Shell 中从 CSV 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61140286/