【发布时间】:2015-07-01 07:21:09
【问题描述】:
我有一个这样的文件:
K1 bla STARTED
K1 bla FINISHED
K2 blu FINISHED
K3 bli STARTED
K3 bli DIED_SKIPPED_PERMANENTLY
K4 blo STARTED
K5 ble STARTED
K5 ble DIED_SKIPPED_PERMANENTLY
K6 blou STARTED
K6 blou STARTED
据此,我想获得一个文件,当第 1 列中的每个名称都有 FINISHED 或 DIED_SKIPPED_PERMANENTLY 时,只存在包含此信息的行而不存在其他行(带有 STARTED 或其他内容)。
此外,如果两行相同(如 K6 的那一行),我只想打印一个。
在我的示例中,输出将是:
K1 bla FINISHED
K2 blu FINISHED
K3 bli DIED_SKIPPED_PERMANENTLY
K4 blo STARTED
K5 ble DIED_SKIPPED_PERMANENTLY
K6 blou STARTED
我不能只删除
grep -v STARTED
因为对于某些名称,例如我的示例中的 K4,只有这一行存在,我想知道它是否开始(或不开始),所以我需要保留该信息。
我有一个文件,其中包含我从第 1 列获得的所有名称:
awk '{print $1}' file | sort | uniq > names # 7,752 lines
我在想那种循环:
对于文件“names”中存在的每个名称,请执行以下操作:
如果带有 $line 的行之一包含 FINISHED 或 DIED_SKIPPED_PERMANENTLY,则在我的输出中仅打印该行而不打印其他行。
否则,保留包含该名称的所有行。
但删除相同的行。
这是这个想法,但我不知道我该怎么做。 如果有人可以提供帮助,我将不胜感激
【问题讨论】:
-
only the line containing this information is present and not the other ones (with STARTED or other things)但你的输出确实有STARTED?你什么意思?
标签: bash while-loop grep line