Найти первый или третий столбец - PullRequest
1 голос
/ 16 ноября 2011

Следующая команда работает как положено.Мне нужно найти идентификатор потока, который доступен в первом или третьем столбце.

# tail -1000 general.log | grep Connect | egrep -v "(abc|slave_user)"
                2856057 Connect root@localhost on 
111116  5:14:01 2856094 Connect root@localhost on 

Если строка начинается с даты, выберите третий столбец, т.е. 2856094, или первый столбец, например, 2856057 * 1004.*

Expected output:
2856057
2856094

Ответы [ 5 ]

5 голосов
/ 16 ноября 2011

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

awk '{ print $(NF-3) }'

В противном случае, если дата действительно является единственным надежным индикатором, попробуйте следующее:

awk -v Date=$(date "+%y%m%d") '$1 == Date { print $3; next } { print $1 }'
1 голос
/ 16 ноября 2011

Используйте встроенную переменную awk NF для захвата количества полей. Если они равны 6, выведите 3 столбца, иначе выведите 1-й столбец.

awk 'NF==6{ print $3;next } { print $1 }' INPUT_FILE
1 голос
/ 16 ноября 2011

Это может работать для вас:

 tail -1000 general.log | sed -e '/abc\|slave_user/d;/ Connect.*/!d;s///;s/.* //'
1 голос
/ 16 ноября 2011

Если ваши данные действительно такие регулярные (то есть все столбцы имеют фиксированную ширину), тогда вы можете использовать cut:

tail -1000 general.log | grep Connect | egrep -v "(abc|slave_user)" | cut -c17-23
0 голосов
/ 16 ноября 2011

Не зная формата файла, возможно, попробуйте:

$ tail -1000 general.log | grep Connect | egrep -v "(abc|slave_user)" | awk '{if ($3 == "root@localhost"){print $1;}else{print $3}}'

Или, возможно, это сработает, что проще:

$ awk '/Connect/ {if ($3 == "root@localhost"){print $1;}else{print $3}}' general.log

Я пытался.Если я ошибаюсь или есть лучший способ, я научусь этому вовремя.:)

Может быть, используя int () ??????

$ awk '/Connect/ {if (!int($3)){print $1;}else{print $3}}' general.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...