paste es una utilidad de línea de comandos de Unix que se utiliza para unir archivos horizontalmente (fusión paralela) generando líneas que consisten en las líneas secuencialmente correspondientes de cada archivo especificado, separadas por tabulaciones, en la salida estándar .
La versión original de Bell Labs fue escrita por Gottfried WR Luderer. [1] [2] La versión paste
incluida en GNU coreutils fue escrita por David M. Ihnat y David MacKenzie. [3] El comando está disponible como un paquete separado para Microsoft Windows como parte de la colección UnxUtils de puertos Win32 nativos de utilidades comunes de tipo Unix de GNU. [4]
La utilidad de pegar se invoca con la siguiente sintaxis:
pegar [ opciones ] [ archivo1 ..]
Una vez invocado, paste leerá todos los argumentos de archivo . Para cada línea correspondiente, paste agregará el contenido de cada archivo en esa línea a su salida junto con una tabulación. Cuando haya completado su operación para el último archivo, paste generará un carácter de nueva línea y pasará a la siguiente línea.
La operación de pegar finaliza después de que todos los flujos devuelvan el final del archivo. La cantidad de líneas en el flujo de salida será igual a la cantidad de líneas en el archivo de entrada con la mayor cantidad de líneas. Los valores faltantes se representan mediante cadenas vacías.
Si bien es potencialmente útil, una opción para que paste emita una cadena alternativa para un campo faltante (como "NA") no es estándar.
Una secuencia de registros vacíos en la parte inferior de una columna del flujo de salida puede o no haber estado presente en el archivo de entrada correspondiente a esa columna como registros vacíos explícitos, a menos que sepa que el archivo de entrada suministró todas las filas explícitamente (por ejemplo, en el caso canónico donde todos los archivos de entrada tienen de hecho el mismo número de líneas).
La utilidad de pegar acepta las siguientes opciones:
-d|--delimiters delimiters
, que especifica una lista de delimitadores que se utilizarán en lugar de tabuladores para separar valores consecutivos en una sola línea. Cada delimitador se utiliza por turno; cuando se agota la lista, el pegado comienza de nuevo en el primer delimitador.
-s|--serial
, lo que hace que paste agregue los datos en serie en lugar de en paralelo; es decir, de manera horizontal en lugar de vertical.
Para los siguientes ejemplos, supongamos que names.txt es un archivo de texto sin formato que contiene la siguiente información:
Marco SmithBobby BrownSue MillerJenny Igotit
y que numbers.txt es otro archivo de texto sin formato que contiene la siguiente información:
555-1234555-9876555-6743867-5309
El siguiente ejemplo muestra la invocación de pegar con names.txt y numbers.txt así como la salida resultante:
$ pegar nombres.txt números.txt Mark Smith 555-1234 Bobby Brown 555-9876 Sue Miller 555-6743 Jenny Igotit 867-5309
Cuando se invoca con la --serial
opción ( -s
en BSD o sistemas más antiguos), la salida de pegar se ajusta de manera que la información se presente de manera horizontal:
$ paste --serial nombres.txt números.txt Mark Smith Bobby Brown Sue Miller Jenny Igotit 555-1234 555-9876 555-6734 867-5309
Finalmente, el uso de la --delimiters
opción ( -d
en BSD o sistemas más antiguos) se ilustra en el siguiente ejemplo:
$ paste --delimiters .names.txt numbers.txt Mark Smith.555-1234 Bobby Brown.555-9876 Sue Miller.555-6743 Jenny Igotit.867-5309
Como ejemplo de uso de ambos, el comando pegar se puede utilizar para concatenar varias líneas consecutivas en una sola fila:
$ paste --serial --delimiters '\t\n' names.txt Mark Smith Bobby Brown Sue Miller Jenny Igotit