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