将三行合并为一行

时间:2016-09-12 13:56:28

标签: awk sed merge

我有问题。起初我将xlsm转换为tsv。一列有\ n分隔字符串,如果我使用xlsx2csv工具,我从这一行收到了三行。

F.E。: XLSM文件:

> 2 LO rofl string_A 
> 1 HI lol "string| 
>           string_2|
>           string_3"

在.TSV文件中

> 2 LO rofl string_A   
> 1 HI lol "string|   
> string_2|  
> string_3"

如果列$ 1以string2或string3开头,我想自动获取所有行:

 > 2 LO rofl string_A 
 > 1 HI lol "string|string2|string3"

请你帮助我,最好用awk或sed取悦。 谢谢..

1 个答案:

答案 0 :(得分:1)

真的不清楚你在寻求帮助 - xlsm格式文件,无论它们是什么,或xlsx2csv,无论是什么(每个人和他们的奶奶都有这个名字的工具,我怀疑你是不是在打电话给我! ),或似乎不包含任何选项卡或其他内容的tsv文件。从晴天的输入示例中你也可能看到你可能有的下雨天情况(例如嵌入式")以及文件的每一行是否真的以>开头,或者你是否只是不知道如何格式化你的例子。

所以,考虑到所有这些,尝试使用GNU awk进行多字符RS和RT:

awk -v RS='"[^"]*\n[^"]*"' '{gsub(/\s*\n\s*/,"",RT); ORS=RT} 1' file

祝你好运!

例如:

$ cat file
2 LO rofl string_A
1 HI lol "string|
          string_2|
          string_3"

$ awk -v RS='"[^"]*\n[^"]*"' '{gsub(/\s*\n\s*/,"",RT); ORS=RT} 1' file
2 LO rofl string_A
1 HI lol "string|string_2|string_3"