删除换行符,同时保留换行符,然后再换一个换行符

问题描述 投票:0回答:2

我有一个带有很多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 sed grep
2个回答
1
投票

使用段落模式:

$ 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打印输入记录内容的惯用方式

0
投票

您能不能尝试以下操作。

awk '{printf("%s%s",NF && FNR>1 && prev!=""?OFS:FNR>1?ORS:"",$0);prev=$0} END{print ""}'  Input_file
© www.soinside.com 2019 - 2024. All rights reserved.