awk :
awk '{ printf "%s%s",$0,($0~/\)$/)? ORS:FS }' file
A saída:
(123456 'abcdef' 'a1b2c3d4' '1234567890' 0)
(789012 'zyxwv' '987gha871' '987654828' 0)
Estou tentando trabalhar com um arquivo de texto grande para colocar dados delimitados por parênteses em uma única linha. Atualmente, ele é dividido em várias linhas ...
O que parece:
(123456
'abcdef'
'a1b2c3d4'
'1234567890'
0)
(789012
'zyxwv'
'987gha871'
'987654828'
0)
O que eu preciso que pareça:
(123456 'abcdef' 'a1b2c3d4''1234567890' 0)
(789012 'zyxwv''987gha871''987654828' 0)
Tentando derrubar isso usando um sed-one liner, mas não tendo muita sorte. Alguma idéia?
Obrigado !!
Uma solução Perl :
perl -nle 'if (/\(/../\)/) {push @a,$_;if (m/\)/) {print "@a";@a=()}}' file
Isso usa o operador intervalo ("..") para capturar qualquer coisa que seja vista entre (incluindo) parênteses abertos e um fechamento. Quando um parêntese de fechamento é detectado, o conteúdo do array é impresso e o array é limpo para o próximo ciclo.