Shell 在unix中将多行转换为单行

Shell 在unix中将多行转换为单行,shell,csv,unix,hive,multiline,Shell,Csv,Unix,Hive,Multiline,我有一个文件,它在一列中有多行数据,我想把多行转换成单行 下面是带有标题的示例 final_date|Notes|Status 04/17/2019|"- OB Team - Number of Attempt(s): 1 Outcome:other Order (RMO):0 Campaign : ABC Additional Notes: not a working number * If any call return to transfer to OB team *"|Compl

我有一个文件,它在一列中有多行数据,我想把多行转换成单行

下面是带有标题的示例

final_date|Notes|Status
04/17/2019|"- OB Team - 
Number of Attempt(s): 1
Outcome:other
Order (RMO):0
Campaign : ABC
Additional Notes:  not a working number  
* If any call return to transfer to OB team *"|Complete
04/18/2019|"- OB Team - 

Number of Attempt(s): 3
Outcome: NO ANSWER
Order (RMO): 0
Campaign Name: ABC

*If return call, transfer to OB team* 


- OB TEAM - 
Number of Attempt(s):  1 
Outcome:  VM
Order (RMO):  0
Campaign Name:  ABC 
Additional Notes: None
*If return call, transfer to OB team*"|Complete
以上数据有两条记录。我希望它们转换为单行,然后加载到配置单元表

以上数据应按以下方式转换

final_date|Notes|Status
04/17/2019|"- OB Team - Number of Attempt(s): 1 Outcome:other Order (RMO):0 Campaign : ABC Additional Notes:  not a working number * If any call return to transfer to OB team *"|Complete
04/18/2019|"- OB Team - Number of Attempt(s): 3 Outcome: NO ANSWER Order (RMO): 0 Campaign Name: ABC *If return call, transfer to OB team*  - OB TEAM - Number of Attempt(s):  1  Outcome:  VM Order (RMO):  0 Campaign Name:  ABC Additional Notes: None *If return call, transfer to OB team*"|Complete

有人能帮我一下吗

根据当前行中双引号的数量操作输出记录分隔符

awk -F\" 'BEGIN{ors=ORS} NF&&!(NF%2){ORS=(ORS!=ors)?ors:OFS} 1' file

你有没有试图自己解决这个问题?你试过什么?另外,在
|Complete
之前,您的示例输入的最后一行不应该有双引号吗?您是对的,我确实尝试过删除空白行,使用类似于这样的awk
awk'BEGIN{FS=“|”;RS='\n';OFS=“|”;}{print;}'
之后,我想连接每一行,直到找到下一行。我找不到连接的方法。好的,你能保证第二个字段中没有双引号吗?是的,基本上我得到了一个excel并转换为CSV。转换为csv时,我得到了该列的双引号。@subro,您不应该使用面向行的工具(如awk或sed)解析csv。CSV解析在许多编程语言(仅举几个例子,PHP、Perl、Python、Java)中都非常容易完成。试着自己用这些语言中的一种来解决这个问题。我相信你会在这里找到问题的答案,因此,不需要创建新的帖子。它在第一行非常有效,但在第二行不行。@subro,更新,我忘记了空行,抱歉。它现在可以工作了吗?是的,它正在按预期工作,请你帮我理解一下。@subro很简单,我们正在根据当前行中双引号的数量在其原始值(
\n
默认为换行符)和输出字段分隔符(默认为空格)之间切换输出记录分隔符。这样,即使有多个断开的字段,这也会修复所有字段