handler Опубликовано 16 октября, 2008 Жалоба Поделиться Опубликовано 16 октября, 2008 Здравствуйте Имеем вывод tcpdump в котором все поля идут через пробелы, кроме второго - оно отделено от третьего точкой tcpdump -i eth0 | awk '{print $1, $2, $3}' получаем второе и третье поле во втором tcpdump -i eth0 |awk -F . '{print $1, $2, $3}' получаем что все поля в строке разделяются точками а нам надо только одно поле выделить tcpdump -i eth0 | awk $2~/.$/ '{print $1, $2, $3}' не работает хотя в доке написано что есть выражение "$2~/a$/" - a последний символ 2-го поля как мне отделить два поля разделенные точкой? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 16 октября, 2008 Жалоба Поделиться Опубликовано 16 октября, 2008 tcpdump | awk '...' | awk -F. '...' Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
handler Опубликовано 16 октября, 2008 Автор Жалоба Поделиться Опубликовано 16 октября, 2008 мне надо одно поле разобрать а не всю строку Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 16 октября, 2008 Жалоба Поделиться Опубликовано 16 октября, 2008 Первым awk возвращаете нужное поле, вторым - разбираете его. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
handler Опубликовано 17 октября, 2008 Автор Жалоба Поделиться Опубликовано 17 октября, 2008 если мы прогоним два прохода то второй проход будет касаться только результатов работы первого прохода а нам надо прочитать ВСЕ поля строки чтобы потом все поля поместить в базу данных Необходимо применить правило разделения полей точкой только ко второму полю во всей строке и на выходе получит всю строку по полям Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cppmm Опубликовано 17 октября, 2008 Жалоба Поделиться Опубликовано 17 октября, 2008 Можно сначала обработать при помощи cut, разделив всю строку по точке и вывести результат используя пробелы, а потом обработать с помощью awk(или того же cut; это уже по желанию). Примерно так: Цитата: $ echo "field1 field2.field3 field4" | cut -d . --fields=1,2 --output-delimiter=' ' | awk '{print $1, $2}' field1 field2 $ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 17 октября, 2008 Жалоба Поделиться Опубликовано 17 октября, 2008 Алексей писал(а) Fri, 17 October 2008 13:12 если мы прогоним два прохода то второй проход будет касаться только результатов работы первого прохода а нам надо прочитать ВСЕ поля строки чтобы потом все поля поместить в базу данных Цитата: мне надо одно поле разобрать а не всю строку Может Вы определитесь все-таки, ОДНО поле Вам нужно или ВСЕ? Если все, то: xxx ~ # echo '123 456.789 000 13' | awk '{print $1, $2, $4}' | awk -F. '{print $1, $2}' 123 456 789 13 Печатаем сначала нужные поля, выделенные по пробелу (среди которых есть и второе, содержащее точку). Затем печатаем из них первое - т.е. всю предыдущую строку ДО точки и второе - т.е. строку ПОСЛЕ нее. В конце концов, дайте образец строки и того, что из нее нужно получить. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cppmm Опубликовано 17 октября, 2008 Жалоба Поделиться Опубликовано 17 октября, 2008 Цитата: В конце концов, дайте образец строки и того, что из нее нужно получить. Это будет лучший вариант. Действительно, гадать сложно. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
handler Опубликовано 18 октября, 2008 Автор Жалоба Поделиться Опубликовано 18 октября, 2008 echo a b.c | awk 'split($2, i, ".") {print $1, i[1], i[2]}' теперь помогите мне с файлами я запускаю из крона строку типа tcpdump ...| awk... > "some_file" которая собирает отфильтрованную статистику в файл т к tcpdump выдает много данных наш файлик растет с приличной скоростью и потому нам надо реализовать смену записи в файл что-то вроде killall tcpdump if("file_1") { tcpdump ... | awk ... > "file_2" mysql "load data local infile file_1 into table my_table" rm -f file_1} else tcpdump ... | awk ... > "file_1" mysql "load data local infile file_2 into table my_table" rm -f file_2} как мне убить tcpdump? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.