shell - Searching symbol patterns -
i trying use awk script:
awk -v count=0 '/`),`/ { count++ } end { print count }' sample.sql
but following error:
error: awk: line 1: runaway regular expression /\),/ {..
why getting error , can fix it?
the target count line backticks , closing parenthese like:
insert test (`id`, `address`) values (1,'delhi'),(2,'mumbai')
thanx @tensibai. added \ line ),. , works. .sql contain insert
test
(id
,nm
) values (1,'delhi'),(2,'mumbai'),(3,'chennai')...; so, did search ), starting count=1. have idea search better count.?
if correctly understood try achieve (counting lines wich contain ),
) should do:
awk '/\(`.*`\)`/ { count++ } end { print count }' sample.sql
no need initialize variable, match line containing
(` text here `)
and increment counter printed @ end.
as i've small doubt on original question here how count number of value in each line:
awk '/\(.*\),/ { n=split($0,a,"\),"); print n; ncount += n; count++;} end { print "lines matched:",count,"total values:",ncount }'
here each line more 1 value ( match (text inside),
) split on ),
, number of values variable n
, print n
, sum number of values , increment number of lines matched.
at end print lines matched , total values found.
warning not count lines 1 value given. (no ,
after last ))
to avoid warning above , focus on insert
statement only:
awk '/insert.*\(.*\),*/ { n=split($0,a,"\)(,|\n)"); print n; count++;} end { print count }' /srv/db-backup-20-10-2014.sql
adding insert starting word , option on split split on closing parenthese followed comma or newline.