我正在尝试使用这个awk脚本:
awk -v count=0 '/`),`/ { count++ } END { print count }' sample.sql
但是我收到以下错误:
ERROR:
awk: line 1: runaway regular expression /\),/ {..
为什么我收到此错误,我该怎么做才能修复它?
目标是用反引号计算行数并关闭括号,如:
INSERT INTO test (`id`, `Address`) VALUES (1,'Delhi'),(2,'Mumbai')
Thanx @Tensibai。我刚刚添加\ line to),.和它的作品。我的.sql 包含INSERT INTO
test
(id
,nm
)VALUES (1,'德里&#39),(2,'孟买'),(3,'奈')...;所以,我确实搜索过), 起始计数= 1。有谁知道哪里会更好地搜索 算数。?
答案 0 :(得分:2)
如果我正确地理解了你想要达到的目标(计算包含),
的行),那么应该这样做:
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
添加INSERT作为起始单词,并在分割上添加一个选项,以便在结束括号后分隔逗号或换行符。
答案 1 :(得分:0)
你能否更清楚地了解你想要实现的目标,只要我能理解你正在尝试获取文件sample.sql中存在的行数,你也可以通过使用
awk -v count=0 '{ gsub("[^)]", ""); count++} END{print count}' sample.sql
答案 2 :(得分:0)
awk
在第一次使用时初始化一个0
的整数。如果要计算包含)
的文件中的行,可以直接使用:
awk '/\)/{c++} END {print c}' input