Esta es mi primera pregunta de codegolf, así que me disculpo de antemano si no es apropiado, y agradezco cualquier comentario.
Tengo un archivo con este formato:
a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line
Los contenidos reales varían, al igual que el delimitador. Los contenidos son solo texto. El delimitador solo aparece una vez por línea. Para este rompecabezas, siéntase libre de cambiar el delimitador, por ejemplo, use "%" como delimitador.
Salida deseada:
a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line
Ya tengo los scripts ruby y awk para fusionar esto, pero sospecho que es posible tener una línea corta. es decir, una línea que se puede usar junto con tuberías y otros comandos en la línea de comandos. No puedo entenderlo, y mi propio script es demasiado largo para comprimir en la línea de comando.
Se prefieren los caracteres más cortos. La entrada no está necesariamente ordenada, pero solo nos interesa fusionar líneas consecutivas con los primeros campos coincidentes. Hay líneas ilimitadas con los primeros campos coincidentes. El campo 1 podría ser cualquier cosa, por ejemplo, nombres de frutas, nombres propios, etc.
(Ejecuto en MacOS, por lo que personalmente estoy más interesado en las implementaciones que se ejecutan en Mac).
Aquí hay un segundo ejemplo / prueba. Aviso "|" Es el delimitador. El espacio antes del "|" es irrelevante, y si se reenvía debe considerarse parte de la clave. Estoy usando "%" como delimitado en la salida, pero nuevamente, siéntase libre de cambiar el delimitador (pero no use corchetes).
Entrada:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom
Salida deseada:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom
fuente
["A|some text", "B|other text", "A|yet some other text"]
no es una entrada deseada para probar, ya que las palabras clave paraA
no son una tras otra en la lista.Respuestas:
Retina , 17 bytes
Puntuación en bytes codificados ISO 8859-1.
Utiliza en
;
lugar de|
como el separador de campo de entrada.Pruébalo en línea.
fuente
V ,
1613 bytesPruébalo en línea!
Tu dijiste
Así que elegí
|
como delimitador. Si esto no es válido, avíseme y lo cambiaré.Explicación:
fuente
Perl
-0n
, 2 + 43 = 45 bytesManifestación:
fuente
SQL (PostgreSQL),
4372 bytesEsto aprovecha la práctica función agregada string_agg en PostgreSQL. La entrada es de una tabla llamada
T
con 2 columnasA
yB
. Para cumplir mejor con la pregunta, he incluido el comando para cargar datos de un archivo en la tabla. El archivo también lo esT
. No he contado la declaración de creación de tabla.La salida no estará ordenada, pero si eso es un problema, se puede solucionar con un
ORDER BY A
SQLFiddle no quería jugar para mí, pero esto es lo que obtengo en mi configuración.
fuente
C, 127 bytes
Funciona con gcc. Se cambió el delimitador a
/
. Toma la entrada de stdin y escribe la salida en stdout, así que llama con la redirección de entrada./a.out <filename
Sin golf:
fuente
Pyth - 15 bytes
Hacer algunas suposiciones sobre el problema cambiará cuando OP aclare.
Pruébelo en línea aquí .
fuente
Python 3 - 146 bytes
La entrada es el nombre del archivo o la ruta del archivo, la salida es stdout. Podría ser mucho más corto si pudiera tomar la entrada como texto sin formato desde la línea de comandoToma entrada de stdin y salidas a stdin. Configuración con separador
"|"
. Para probar la entrada de primer ejemplo, use el separador" | "
fuente
Java 7, 167 bytes
Probablemente se pueda jugar más al golf utilizando un enfoque diferente.
NOTA: El método anterior crea y devuelve a
HashMap
con los pares clave-valor deseados. Sin embargo, no lo imprime en la salida exacta como en la pregunta de OP con|
como delimitador de salida entre las claves y los nuevos valores. A juzgar por la respuesta SQL de MickeyT donde devolvió una tabla de base de datos, pensé que esto estaba permitido; si no se deben agregar más bytes para una función de impresión.Ungolfed y código de prueba:
Salida:
fuente
PowerShell, 85 bytes
Las cadenas se fusionan usando la tabla hash:
Ejemplo
Dado que PowerShell no admite la redirección de stdin mediante
<
, supongo queGet-Content .\Filename.txt |
se usará como método de E / S predeterminado.Salida
fuente
APL, 42 caracteres
fuente
⌸
No es un byte en la codificación APL.Sed, 55 bytes
Prueba de funcionamiento :
fuente
q / kdb +, 46 bytes
Solución:
Ejemplo:
Explicación:
fuente