如何从A字打印到B字?(awk)

时间:2015-07-22 07:59:34

标签: regex awk

我需要打印“更新”字样。到';'。

file.txt的:

-- Host (first) kkk (queen1)
-- prince princess#/king 1/1
update schema.table_name t set "A=123","B=234" where "C=222" and "D=333"
and "F=2342";

-- Host (first) ddd (queen2)
-- prince princess#/king 2/2
update schema2.table_name2 t set "A=123","B=234" where "C=222" and "D=333"
and "F=2342";

使用下面的awk,我可以指定要解析的块,但我不确定如何从update更新语句直到semicolon()。

file.awk:

BEGIN {
}
/-- Host/,/;/ {                          
   if (/-- Host/) printf "%s#%s#",$3,$5; 
   if (/update /) printf ??????????????; 
}
END {
}       

这就是我执行它的方式:

awk -f file.awk -F'[ ()]+' file.txt 

你能告诉我任何想法吗?

2 个答案:

答案 0 :(得分:1)

我猜您的问题是,update...行分为多行。这个单行可能会帮助你。但是,您可能需要稍微调整一下以适合您的整个脚本。

awk 'p||/^update/{p=1;printf "%s",$0}/;$/&&p{p=0;print ""}' file

以您的文件作为输入,输出:

update schema.table_name t set "A=123","B=234" where "C=222" and "D=333"and "F=2342";
update schema2.table_name2 t set "A=123","B=234" where "C=222" and "D=333"and "F=2342";

答案 1 :(得分:0)

awk惯用的方法是

awk '/update/,/;/' file.txt