【问题标题】:convert multiline to single line in unix在unix中将多行转换为单行
【发布时间】:2020-01-11 21:43:08
【问题描述】:

我的文件在一列中有多行数据,我希望将多行转换为单行。

这是带有标题的示例

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

以上数据有两条记录。我希望他们将其转换为单行,然后加载到 Hive 表。

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

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

有人可以帮我解决这个问题。

【问题讨论】:

  • 您是否尝试过自己解决这个问题?你试过什么?而且,在|Complete 之前的示例输入的最后一行不应该有双引号吗?
  • 你是对的,我确实尝试使用 awk 来删除空行,就像这样。 awk 'BEGIN{ FS="|"; RS='\n'; OFS = "|" ;} {print;}' 之后我想连接每一行直到我找到 |下一行。我无法连接。
  • 好的,你保证inside第二个字段没有双引号吗?
  • 是的,基本上我得到了一个 excel 并转换为 CSV。在转换为 csv 时,我得到了此列的双引号。
  • @subro,您不应该使用 awk 或 sed 等面向行的工具来解析 CSV。 CSV 解析在许多编程语言中都非常容易完成(仅举几例,PHP、Perl、Python、Java)。尝试使用其中一种语言自己解决问题。我相信您会在 SO 上找到您的问题的答案,而无需创建新帖子。

标签: shell csv unix hive multiline


【解决方案1】:

根据当前行中双引号的个数处理输出记录分隔符。

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

【讨论】:

  • 第一行效果很好,但第二行不行。
  • @subro,更新了,我忘了空行,抱歉。现在可以用了吗?
  • 是的,它按预期工作,请您帮我理解这一点。
  • @subro 很简单,我们根据 double 的个数在其原始值(默认为\n,即换行符)和输出字段分隔符(默认为空格)之间切换输出记录分隔符当前行中的引号。
  • 这样,即使有多个损坏的字段,也会全部修复
猜你喜欢
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多