我想知道是否有办法修复记录之间的换行符并使用 awk 或 sed 仅替换文本文件中的单个\n (换行符)字符?目前我的代码正在用“|”替换所有换行符。但我需要它只替换单个换行符,而不是两个或多个。
如果每个记录都用管道分隔,那么我将能够修复换行符,但我不知道该怎么做。
这是我获取摘录的选择查询:-
select a."rec1" || "|" || a."rec2" || "|" || a."rec3" || "|" || a."rec4" || "|" || a."rec5" || "|" || a."rec6" from tab_1 a
union
select select b."rec1" || "|" || b."rec2" || "|" || b."rec3" || "|" || b."rec4" || "|" || b."rec5" || "|" || a."rec6" from tab_2 b
union
select select c."rec1" || "|" || c."rec2" || "|" || c."rec3" || "|" || c."rec4" || "|" || c."rec5" || "|" || a."rec6" from tab_3 c
我有多个选择查询,我将它们联合起来以获得所需的提取。我想打印“|”在每列记录之后。这样该列的所有记录都必须包含在管道之间,包括最后一个列记录。所需的输出必须如下所示:
所需的提取输出:
||rec 3|rec 4|rec 5|rec 6|
rec 1|rec 2|rec 3|rec 4|rec 5|rec 6|
|rec 2|rec 3|rec 4|rec 5|rec 6|
提取输出:
||rec 3|rec 4|rec 5|rec 6
rec 1|rec 2|rec 3|rec 4|rec 5|rec 6
|rec 2|rec 3|rec 4|rec 5|rec 6
注意:- 每列已用 | 分隔象征。因此,如果该特定列中没有记录(如第一行的情况),管道之间将不会显示任何内容。理想情况下,如果每列都有记录,则文件将如下所示:
记录 1|记录 2|记录 3|记录 4|记录 5|记录 6
所需的输出应如下所示:
rec 1|rec 2|rec 3|rec 4|rec 5|rec 6|
或
|rec 1|rec 2|rec 3|rec 4|rec 5|rec 6
这样,在删除换行符后,每个记录(如果存在)将被封闭在管道之间,如下所示:-
||rec 3|rec 4|rec 5|rec 6|rec 1|rec 2|rec 3|rec 4|rec 5|rec 6||rec 2|rec 3|rec 4|rec 5|rec 6|
最佳答案
使用此选择查询来获取“|”每列记录之间。
select a."rec1" || "|" || a."rec2" || "|" || a."rec3" || "|" || a."rec4" || "|" || a."rec5" || "|" || a."rec6" || "|" from tab_1 a
union
select select b."rec1" || "|" || b."rec2" || "|" || b."rec3" || "|" || b."rec4" || "|" || b."rec5" || "|" || a."rec6" || "|" from tab_2 b
union
select select c."rec1" || "|" || c."rec2" || "|" || c."rec3" || "|" || c."rec4" || "|" || c."rec5" || "|" || a."rec6" || "|" from tab_3 c
获得提取后,您可以使用下面的 awk 和 tr 删除换行符和管道
awk -F'\n' -v RS= -v OFS='' '{$1=$1;printf "%s", $0 RT}' extract.txt | tr '|' '\n' | awk 'NF >0' extract.txt > final_extract.txt
关于bash - 如何在 bash 中仅替换单个换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71950033/