我有一个带有很多SQL查询的文本文件。我需要在单个行上的每个查询。查询由2个换行符分隔,例如/ n / n,而查询本身可能只有一个/ n
输入文件:
select * from
table A
where name = 'abc'
drop table A;
update table a
inner join b on a.name = b.name
fourth query
continue
fifth query
预期输出:
select * from table A where name = 'abc'
drop table A;
update table a inner join b on a.name = b.name
fourth query continue
fifth query
我尝试过,但是它将所有内容打印在一行上。
awk'/ \ n / {printf“ \ n%s \ n”,$ 0; next} {printf“%s”,$ 0}'report41.txt
我发现了这种模式...
https://regex101.com/r/qNQRk5/4
但是有两个问题。 1)我不知道如何在AWK中使用它,以及2)查询中不包含空格。
更新表提示
应该是:
更新表内部
使用段落模式:
$ awk -v RS= -v ORS='\n\n' '{$1=$1} 1' ip.txt
select * from table A where name = 'abc'
drop table A;
update table a inner join b on a.name = b.name
fourth query continue
fifth query
-v RS=
空RS
将根据一个或多个空行分割输入内容-v ORS='\n\n'
将输出记录分隔符设置为两个换行符,请注意,这意味着在输出末尾会有一个空行{$1=$1}
重建记录内容,默认情况下空格/制表符/换行符将被视为输入字段分隔符1
打印输入记录内容的惯用方式您能不能尝试以下操作。
awk '{printf("%s%s",NF && FNR>1 && prev!=""?OFS:FNR>1?ORS:"",$0);prev=$0} END{print ""}' Input_file