2013-03-01 4 views
0

У меня есть файл журнала, в котором я, по сути, выхожу из системы, вырезаю строки до тех пор, пока не останется только два поля, сортировка однозначно в поле 1 и подведите поле справа, когда номера полей и поле1 одинаковы. ПримерУдалить текст из строки

80 128 
443 40 
80 100 
25 20 
443 44 
80 128 

Результаты будут

80 356 
443 84 
25 20 

вопрос я имею существует несоответствие в первом поле, что я вырезал где иногда выход будет выглядеть следующим образом:

и иногда

80(LOCAL\randomuser) 128 

Так что мой выход заканчивает тем, как

80 356 
80(LOCAL\randomuser) 128 
443 84 
25 20 

это происходит потому, что 80 (LOCAL \ RandomUser) является уникальной линии.

Как я могу сначала нормализовать первое поле, чтобы (LOCAL \ randomuser) удалялся из строк, которые существуют, а строки, которые не имеют (LOCAL \ randomuser), остаются неизменными.

ответ

0

grep -v будет соответствовать строкам, которые не содержит образец. Вытяните выход через grep, прежде чем он достигнет cut.

+0

Кажется, что ОП не хочет, чтобы исключить какую-либо линию, а для удаления конкретной подстроки из колонны 1. –

+0

Проблемы заключается в том, что я хочу, чтобы линии I просто нужно удалить этот текст. Если я сопоставляю онлайн-строки, которые не содержат шаблона, я пропускаю ценные данные. Я просто хочу удалить (LOCAL \ username) из строк, которые есть, и строки, которые не оставляют в покое. –

1

Использование

awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input 

использовать первое т.е. поле ключа и добавить последнее поле.

Если нет пространства между первым номером и (, как это выглядит, как в вашем примере, скажите AWK разделить на (, а также:

awk -F"[ (]+" '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input 

выход:

$ awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input 
25 20 
80 356 
443 84 

Другой подход к удалению только (LOCAL\randomuser), если он имеется, вы можете использовать sed:

sed 's/(.*)//' input 
+0

вы можете использовать -F '[^ [: digit:]] +', и он будет работать, есть ли пробел или нет (или любые другие цифры) после первого номера. –

1

Или силы $1 в числовой контекст:

awk '{A[$1+0]+=$NF} END{for (i in A) print i, A[i]}' file 
Смежные вопросы