у меня есть файл такого рода:сохранить некоторые строки файла в соответствии с некоторыми условиями
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
, только строка, содержащая эту информацию, присутствует, а не другие (с ЗАПУСКОМ или другими вещами). Кроме того, если две строки идентичны (например, одна из 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
, потому что для некоторых имен, как К4 в моем примере, только эта строка присутствует и я хочу знать, что это началось (или нет), поэтому мне нужно сохранить эту информацию.
У меня есть файл со всеми именами из столбца 1, что я получил с:
awk '{print $1}' file | sort | uniq > names # 7,752 lines
Я думал о петле такого рода:
Для каждого имен, присутствующих в файле «имена », сделайте следующее:
Если один из линии с $ line
содержит FINISHED
или DIED_SKIPPED_PERMANENTLY
, а затем распечатать только ту строку в моем выходе и не печатает другие. Ищите все строки, содержащие это имя. Но удалите строки, которые идентичны.
Вот эта идея, но я не знаю, как я могу это сделать. я был бы признателен, если кто-то может помочь
'только строка, содержащая эту информацию, присутствует, а не другие (с ЗАПУСКОМ или другими вещами)', но на вашем выходе есть «НАЧАЛО»? что вы имеете в виду? – Kent