删除换行符,同时保留换行符后跟另一个换行符



我有一个包含大量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 '//{printf "%s",$0;next} {printf "%s ",$0}' report41.txt

我发现了这种模式...

https://regex101.com/r/qNQRk5/4

但是有两个问题。 1(我不知道如何在AWK中使用它,并且2(查询不包含空格。

更新表内

应该是:

更新表 A 内部

使用段落模式:

$ awk -v RS= -v ORS='nn' '{$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='nn'将输出记录分隔符设置为两个换行符,请注意,这意味着输出末尾将有一个空行
  • {$1=$1}重建记录内容,默认情况下空格/制表符/换行符将被视为输入字段分隔符
  • 输出字段分隔符不会更改,因此它在字段之间使用默认的单个空格
  • 打印输入记录内容的惯用1方法


要保留间距并仅将换行符转换为空格:

$ printf '   atttbn  cnn1  2    3' | awk -v RS= -v ORS='nn' '{$1=$1} 1'
a b c
1 2 3
$ printf '   atttbn  cnn1  2    3' | awk -v FS='n' -v RS= -v ORS='nn' '{$1=$1} 1'
a            b   c
1  2    3

你能试试下面的吗?

awk '{printf("%s%s",NF && FNR>1 && prev!=""?OFS:FNR>1?ORS:"",$0);prev=$0} END{print ""}'  Input_file

说明为上述添加说明。

awk '                                                          ##Starting awk program from here.
{
printf("%s%s",NF && FNR>1 && prev!=""?OFS:FNR>1?ORS:"",$0)   ##Using printf command here, printing 2 strings. Checking condition if line is greater than 1
prev=$0                                                      ##AND prev NOT equal to 1 print new line or line is grater than 1 print ORS or NULL, then print line.
}                                                              ##Setting current line value to prev variable here.
END{                                                           ##Starting END block of this code here.
print ""                                                     ##Printing new line here.
}
'  Input_file                                                  ##Mentioning Input_file name here.

最新更新