Awk 将三行合并为一行

Awk 将三行合并为一行,awk,sed,merge,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|

我有问题。首先,我将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。
谢谢..

对于-xlsm格式的文件,不管它们是什么,或者xlsx2csv,不管它是什么(每个人和他们的奶奶都有一个这个名字的工具,我怀疑你是不是在叫我的!),或者似乎不包含任何选项卡的tsv文件,或者其他什么,你真的不清楚你在寻求什么帮助。从sunny day输入示例中也看不出您可能遇到了什么样的雨天情况(例如嵌入的
s),文件的每一行是否真正以
开头,或者您只是不知道如何格式化示例

因此,考虑到所有这些,请使用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"

我猜你指的是三行而不是文件?对。我指的是三行:-(我正在考虑这个问题…我想我可以找到最后一列…我的列以“|”结尾,在下面一次又一次地添加行。我正在尝试编写脚本,但不起作用…非常感谢,问题解决了,我为困惑的答案道歉。最好的费杜尔卡