Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 15

Удаление из строки всех одинарных кавычек в теле AWK

01.08.2017, 13:08. Показов 4559. Ответов 4
Метки awk (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Входные данные:

Что делаем: обрабатываем лог-файл и пишем подходящие под условия строки в виде SQL-инструкции в файлик, который потом выполним.
Пример строчки из лог файла:
17-07-31 10:23:18,027 INFORMATION Неважный_столбец [192.168.24.159] Тут некоторое текстовое выражение, которое может в себя включать одинарные кавычки
Правило обработки: если пятый столбец начинается с [ и заканчивается на ], то считаем эту запись подходящей

Проблема: В тексте, который идет после IP могут встречаться кавычки, что ломает мне картину(инсерт не инсертит, что, в общем-то, логично).

Вопрос: как избавиться от одинарных кавычек (удалить из определенного столбца, а точнее из суммы нескольких полей) в теле awk? То есть,по сути, мне нужно удалить кавычки в переменной w, которую я собираю из нескольких столбцов, перед выводом. Много всего пробовал, но, видимо, в край запутался в синтаксисе и кавычках.

Вот сам скриптик:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
awk '
    $5~/\[.+\]$/{OFS=""}
    {
    for(i=6; i<=NF; i++) {
        w=w $i " "
        };
        { 
        print "INSERT INTO DB.TABLE (logdate,logtime,loglevel,IP,message) VALUES(TO_DATE(\x27",$1,"\x27,\x27MM-DD-YY\x27),\x27",$2,"\x27,\x27",$3,"\x27,\x27",$5,"\x27,\x27",w,"\x27"
        };
        {
        w=""
        }
    }
    ' file.log
Заранее благодарю за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.08.2017, 13:08
Ответы с готовыми решениями:

Использование одинарных и двойных кавычек
Почему скажем нельзя использовать только одинарные или только двойные кавычки? $from = '&quot;'.get_real_name($admin_user).'&quot;...

Экранирование символов одинарных кавычек (апострофов)
Помогите мне решить проблемку, вот она... &lt;?php function slider() { echo ' &lt;div id=&quot;container-slider&quot;&gt; &lt;div...

Вставка одинарных кавычек в каждой строке
Доброго времени суток! Есть текстовый документ формата .txt, в нем в каждой строке есть табельный номер: 1231231312312 ...

4
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.08.2017, 16:55
Почему Вы решили что awk лучший выбор для этой задачи?
Bash
1
2
3
4
5
6
7
8
9
10
sed "
/\(\S\+\s\+\)\{4\}\[\S\+\]/! d
s/'//g
s/\s\+/ MM-DD-YY /
:a
s/\s\+/','/
/]'/! ba
s/$/'/
s/^/INSERT INTO DB.TABLE (logdate,logtime,loglevel,IP,message) VALUES(TO_DATE('/
" file.log
Добавлено через 1 час 23 минуты
Bash
1
2
3
4
5
6
7
8
9
10
11
12
awk '
$5 ~ /\[/ {
    printf "%s\x27", "INSERT INTO DB.TABLE (logdate,logtime,loglevel,IP,message) VALUES(TO_DATE("
    print $1
    $1="MM-DD-YY"
    for(i=1;i<6;i++)
        print $i
    sub(".*] ", "")
    gsub("\x27", "")
    }
ORS="\x27\n"
'  ORS="\x27,\x27" file.log
1
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 15
01.08.2017, 17:01  [ТС]
Marinero,
спасибо за ваш вариант.

Возможно с awk я и не прав, я его в живую только сегодня увидел. Просто он мне показался чуть более логичным и структурированным, чем sed. Вот просто я смотрю на свой код на awk и на ваш на sed и awk мне интуитивно более понятен. Я даже не пойму, как превратить ваш отформатированный код в "код одной строкой", ctrl+c, ПКМ работает (через putty), а при попытке удалить переносы строк, все разваливается. То есть понятно, что это не к sed претензии, а ко мне, что я не удосужился пока его синтаксис разобрать, но вроде начал на awk, поэтому и не смотрел.

Еще пара вопросов, с вашего позволения.
1) Подскажите, а почему вы считаете, что sed подходит лучше для данной задачи?
2) Есть ли решение первоначально заданного вопроса именно относительно awk? Очень уж не хочется сейчас время терять, разбираясь в синтаксисе sed, когда до победы с awk остался один маленький шаг. А в случае применения вашего кода, разбираться все равно придется, хоть задача и разовая, как минимум, чтобы я смог потом что-то поправить и\или объяснить. Ну и копировать чей-то код себе на сервер не разобравшись досконально, что он делает, как-то не комильфо, право слово

Вы, кстати, в своем коде забыли скобочку закрывающую в TO_DATE.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.08.2017, 17:17
Цитата Сообщение от RuCosinus Посмотреть сообщение
почему вы считаете, что sed подходит лучше для данной задачи
sed достаточно сложно производить вычисления, но в остальном, возможно засчет специализации, дает фору другим программам при обработке текста. Все таки awk это более высокий уровень, можно сказать «псевдо»-язык программирования, а sed именно строковый редактор (string editor)
Цитата Сообщение от RuCosinus Посмотреть сообщение
Есть ли решение первоначально заданного вопроса именно относительно awk
Есть, оно приведено выше.
Цитата Сообщение от RuCosinus Посмотреть сообщение
Вы, кстати, в своем коде забыли скобочку закрывающую в TO_DATE
«Не мы, а Вы»© Что было у Вас в коде, то и скопировал. И по логике там 2 закрывающие скобки должны быть…

Добавлено через 1 минуту
Цитата Сообщение от RuCosinus Посмотреть сообщение
Ну и копировать чей-то код себе на сервер не разобравшись досконально, что он делает, как-то не комильфо, право слово
Кто заставляет копировать код? Копируйте результат.
0
 Аватар для volodin661
6673 / 2266 / 346
Регистрация: 10.12.2013
Сообщений: 7,834
02.08.2017, 10:42
Для разбора log-файлов и последующего применения SQL существует кросс-платформенный инструмент,
название которого всем известно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.08.2017, 10:42
Помогаю со студенческими работами здесь

В чем разница одинарных и двойных кавычек
Здравствуйте. Изучая стеки, наткнулся в книге вот на такой код, который меня смутил. (комменты мои) // Заполняем стек циклом...

Лишнее экранирование? Одинарных и двойных кавычек
Добрый день! Вопрос такой - уже дня 3 никак не могу решить проблему с правильными отправкой и отображением данных. Одинарные кавычки...

Регулярное выражение для удаления лишних одинарных кавычек
Подскажите пожалуйста выражение, что бы убирать лишние ', при этом не затрагиваю те, что внутри слов. Спасибо. The time '' is ' eleven...

Надо составить паттерн для нахождения в строке одинарных кавычек, НЕ находящихся внутри английских слов
знаю, как осуществить &quot;заглядывание вперёд&quot;, знаю, как &quot;смотреть назад&quot;, затруднение в том, чтобы это совместить

Удаление двойных кавычек из всех ячеек в столца
Приветствую всех . Прошу помочь в решение проблемы суть которой : Есть столбце например &quot;А&quot; и в нем записаны наименования...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru