我看起来像这样的数据
a,b,c,d
a,b1
b2,c,d
A,B,C,D
正在发生的事情是,在第2个字段中,第二个字段中偶尔会出现一个新行字符,因此该行会在两行中分割
到目前为止,我已经找到了一个sed脚本来执行此操作,它读起来像
cat file| sed ':a;N;$!ba;s/\(\(b1\)\)\n/\1/g'
但是我正在努力获得(。*,)的正确组合以使其工作所以我用b1替换它以使这个例子起作用但在现实世界中A,B,C和D是字段混合长度和内容
我正在寻找的最终结果是
a,b,c,d
a,b1b2,c,d
A.B,C,D
非常感谢任何帮助
由于 马特
答案 0 :(得分:2)
我这里有一个尚未完美的解决方案 - 但我会进一步思考它。如果您的sed
版本支持扩展正则表达式,则可以执行以下操作:
cat file | sed -r ':a;N;$!ba;s/((^|\n)([^,]+,){0,2}[^,]+)\n/\1/g'
如果在前三列之一中有换行符,那将会有效。到目前为止,它还没有在“行”中使用多个换行符。
说明:
(^|\n)
匹配行的开头(分别为换行符)
[^,]+,
表示:至少有一个(+
表示一个或多个)字符!=“,”后跟“,”,
如果有0-2列用“,”分隔,([^,]+,){0,2}
匹配
[^,]+
表示在0-2列后面有一些(至少一个)字符!=“,”
尾随\n
与换行符匹配
总结s
命令将匹配包含0-3列的所有行,并在末尾添加换行符,并将其替换为自身(\1
),不包括尾随换行符。
答案 1 :(得分:0)
在awk中
awk -F, 'NF < 4 {getline nextline; $0 = $0 nextline} 1' filename