2015-04-23 2 views
0

Я пытаюсь использовать этот AWK сценария:Searching модели символов

awk -v count=0 '/`),`/ { count++ } END { print count }' sample.sql 

, но я получаю следующее сообщение об ошибке:

ERROR: 
awk: line 1: runaway regular expression /\),/ {.. 

Почему я получаю эту ошибку и что я могу сделать, чтобы это исправить ?

Цель состоит в том, чтобы рассчитывать линию обратные кавычки и закрытия Parenthèse как:

INSERT INTO test (`id`, `Address`) VALUES (1,'Delhi'),(2,'Mumbai') 

Thanx @Tensibai. I just added \ line to),. and its works. My .sql contain INSERT INTO test (id , nm) VALUES (1,'delhi'),(2,'mumbai'),(3,'chennai')...; SO, I did search for), with starting count=1. have anyone idea to where will be search better to do count.?

+1

Какая версия 'awk -version'? Также я предполагаю, что это в конвейере, и у вас больше одинарных кавычек? –

+0

Когда я выполняю поиск любого слова, такого как INSERT, он запускается и дает мне вывод.Но, когда я ищу), то это дает мне ошибку – Pranay

+0

Являются ли эти обратные выходы? ''/\ '), \'/' –

ответ

2

Если я правильно понял, что вы пытаетесь достичь (счетные линии Wich содержат ),), это следует делать:

awk '/\(`.*`\)`/ { count++ } END { print count }' sample.sql 

Нет необходимости инициализировать переменную, сопоставьте строку, содержащую

(` any text here `) 

и увеличиваем счетчик для печататься в конце.


Как я уже небольшое сомнение оригинальный вопрос здесь в том, как подсчитать количество значения в каждой строке:

awk '/\(.*\),/ { n=split($0,a,"\),"); print n; ncount += n; count++;} END { print "Lines matched:",count,"total values:",ncount }' 

Здесь для каждой строки с более чем одного значения (матч (text inside),) разделите на ), и получите количество значений в переменной n, затем распечатайте n, суммируйте количество значений и увеличивайте количество строк.

В конце напечатайте линии, соответствующие всем найденным значениям.

Предупреждение Это не означает линии, в которых задано только одно значение. (Не , после последнего))


Чтобы избежать предупреждения выше, и сосредоточиться на INSERT заявление только:

awk '/INSERT.*\(.*\),*/ { n=split($0,a,"\)(,|\n)"); print n; count++;} END { print count }' /srv/db-backup-20-10-2014.sql 

Добавление ВСТАВКУ в качестве исходного слова и опцион на долю расколоть на закрывающий parenthese, за которым следует запятая или новая строка.

+0

Thanx Я eaxactly ищут это. Его работа как шарм. Спасибо. – Pranay

+0

@Pranay Я тоже нашел недостаток, это подсчет 'PRIMARY_KEY (столбец), (столбец)' тоже, вы хотите рассчитывать только на 'INSERT' Statementments? – Tensibai

+0

Да В моем файле .sql только инструкция insert – Pranay

0

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

awk -v count=0 '{ gsub("[^)]", ""); count++} END{print count}' sample.sql 
+1

OP, заявленный в комментариях, для подсчета количества строк, содержащих ')' – Tensibai

+0

Да, но файл .sql содержит. некоторые, как ... INSERT INTO 'test' (' id', 'Address') VALUES (1, 'Delhi'), (2, 'Mumbai') ....; – Pranay

+0

Итак, я хочу, чтобы строки, размеры которых (1, «Дели») -> 1, тогда (2, «Мумбай») -> это два ... как мудрый – Pranay

0

awk инициализирует целое с 0 на это первое использование. Если вы хотите посчитать строки в файле, содержащем ), вы можете просто использовать это:

awk '/\)/{c++} END {print c}' input 
+0

Я думаю, что хочу подсчитать строку с '), 'on. –

+0

Да @JID Точно! – Pranay

+0

Подсчитайте ')', это весь файл. – Pranay

Смежные вопросы