Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Shell中从CSV中删除重复项_Shell_Sh - Fatal编程技术网

在Shell中从CSV中删除重复项

在Shell中从CSV中删除重复项,shell,sh,Shell,Sh,我在下面的文件中寻找帮助。 第1列中的客户端可以是一个或多个组的一部分。 它们的状态可以是失败、成功或中断。 我只想要那些没有任何成功输入的客户端 范例 我的档案如下 RBCSREXC04 AUTO_RERUN_RBC_DAILY succeeded RBCSRTM03 AUTO_RERUN_RBC_DAILY succeeded RBCVMAPPPROD01 AUTO_RERUN_RBC_DAILY succeeded RBCVVMAPPDEV02 AUTO_RERUN_RBC_DAILY s

我在下面的文件中寻找帮助。 第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

您可以为“good”和“bad”条目维护两个带有
awk
的数组,其中数组索引是第一列,并且只打印“good”数组中不存在条目的“bad”条目

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

说明:
sed
生成具有成功状态的“x”列表(在任何组中)。
grep
将从
status.csv
中删除(因为
-v
)(
-f-
表示
grep
stdin
中获取模式(等于sed的
stdout
)。

csv?或者制表符或空格分开?您尝试了什么?为什么输出中的
b group2没有失败?还是其他?每个组只有一行随机匹配吗?@Shawn其空格分开。@Shawn-因为b组2在最后一行中失败了。谢谢你的帮助,Freddy,但在你的脚本中,我面临的问题是,如果客户在其他组中成功了,那么它将显示为失败。但我希望,如果一个客户机在同一组或任何其他组中获得成功,它就不应该出现在输出中。我只想要那些有一个或多个条目失败或中断而没有成功的客户。Freddy,我用一个新的例子更新了我的问题。我只希望输出中的客户在任何一个组中一次也不成功。谢谢@Freddy的帮助,但我面临着同样的问题,如果客户在任何其他组中成功,那么它不会过滤,但如果它在同一组中成功,那么它会过滤。我希望如果客户机在任何组中获得成功,则它不应在输出中–我已使用服务器上的原始文件更新了我的问题。我在脚本中将
successful
替换为
successfued
。感谢UZSOLT的帮助,但在您的脚本中,我面临的问题是,如果客户机在其他组中获得成功,那么它将显示为失败。但我希望,如果一个客户机在同一组或任何其他组中获得成功,它就不应该出现在输出中。我只想要那些单个或多个条目失败或中断而未成功的客户端。谢谢@Uzsolt的帮助,但我面临着同样的问题,如果客户端在任何其他组中成功,则它不会对其进行筛选,但如果它在同一组中成功,则会进行筛选。我想如果客户在任何一个组中成功,那么它就不应该在组中output@GURUSINGH成功->成功请不要多次编辑您的问题,因为不可能回答它。请准确。谢谢@uzsolt。我现在已经分类了。请让我知道我们是否可以在Powershell中实现同样的目标,我也不知道Powershell。也许这应该是另一个问题。
sed -n '/succeeded/ s,\(.*\) .* succeeded$,\1,p' status.csv | grep -v -f - status.csv