【发布时间】: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