вторник, 25 ноября 2014 г.

Удалить уникальные записи по первому столбцу (awk)

Понадобилось мне сегодня из файлика удалить все уникальные записи, но сравнение надо было делать не по все строке, а только по первому столбцу. Чтобы было понятней, приведу пример такого файла:
user1        09:57:44
user1        10:28:09
user1        12:45:10
user2        10:38:31
user3        10:12:28
user4        10:08:51
user4        10:55:07
user5        10:25:42
user5        11:56:25
user5        12:20:24
Отсюда надо удалить строки, начинающиеся на "user2" и "user3".
Не долго думая, решил подкрепить свои знания по awk...


И получился такой вот велик:
cat my.log | awk 'BEGIN {prev1=""; prev2=""; prev_check=0} { if ($1==prev1) { if (prev_check==1) { print $0 } else { print prev2"\n"$0 }; prev_check=1 } else { prev_check=0 }; prev1=$1; prev2=$0 }' | column -t

С разбивкой по строкам, для удобства восприятия:
awk 'BEGIN {prev1=""; prev2=""; prev_check=1} { 
 if ($1==prev1) { 
  if (prev_check==0) { 
   print $0 
  } else { 
   print prev2"\n"$0 
  }; 
  prev_check=0 
 } else { 
  prev_check=1 
 }; 
 prev1=$1; 
 prev2=$0 
}'




Заметку писал для себя, дабы не забыть.

Я знаю, что можно сделать более изящно... Но на первых шагах у меня такой велик вышел. Главное, работает как надо.





Информация с сайта http://blog.angel2s2.ru/.

Комментариев нет:

Отправить комментарий