es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Une las líneas cortas a la línea anterior.

Quiero mover las líneas cortas (digamos, más cortas de 60 caracteres) a la línea anterior.

Hay una pregunta similar: https://stackoverflow.com/questions/17021770/move-line-which-matches-pattern-to-previous-line

Pero no funciona para mi condición de línea corta.

Puedo obtener todas las líneas cortas, así: awk 'NF<60' FS= archivo.

Pero me gustaría moverlas a la línea anterior.

Ejemplo de lo que me gustaría.
Líneas más cortas representadas por “abc” (longitud < 4).

ANTES:

123456789
abc
123456789
123456789
123456789
abc
abc
123456789
123456789
abc
abc
abc
123456789
123456789
abc
123456789
123456789

DESPUÉS:

123456789abc
123456789
123456789
123456789abcabc
123456789
123456789abcabcabc
123456789
123456789abc
123456789
123456789

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para mover líneas cortas (menos de 60 caracteres) a la línea anterior utilizando awk, puedes usar el siguiente código:

    awk '{
        if (length($0) < 60) {
            getline prev
            print prev $0
        } else {
            print $0
        }
    }' archivo
    

    Este código lee cada línea del archivo y verifica si su longitud es menor a 60 caracteres. Si lo es, lee la línea anterior utilizando getline y la concatena con la línea actual utilizando print prev $0. Si la línea actual no es corta, simplemente la imprime utilizando print $0.

    Con este código, la salida para el ejemplo proporcionado sería:

    123456789abc
    123456789
    123456789
    123456789abcabc
    123456789
    123456789abcabcabc
    123456789
    123456789abc
    123456789
    123456789
    

Comments are closed.