paste (Unix)

{{Short description|Shell command for joining files horizontally}}

{{Lowercase|title=paste (Unix)}}

{{Infobox software

| name = paste

| logo =

| screenshot =

| screenshot size =

| caption =

| author =

| developer =

| released =

| latest release version =

| latest release date =

| operating system = Unix and Unix-like

| platform = Cross-platform

| genre = Command

| license = coreutils: GPLv3+

| website =

}}

paste is a shell command that joins files horizontally (parallel merging) by writing to standard output lines consisting of the sequentially corresponding lines of each input file, separated by tabs.

The command reads each specified input file line-by-line. For each set of input lines, the command outputs a line formatted as the concatenation of the input files' lines separated by a tab character. If the content of a file runs out, the command will use an empty string for the file. As such, the number of output lines will equal the number of lines of the file with the most lines. Some implementations support using a fixed string (such as "NA") when a files content is exhausted before the others.

A sequence of empty records at the bottom of a column of the output stream may or may not have been present in the input file corresponding to that column as explicit empty records, unless you know the input file supplied all rows explicitly (e.g. in the canonical case where all input files all do indeed have the same number of lines).

The command accepts the following options:

:-d|--delimiters delimiters, specifies a list of delimiters to use instead of tabs for separating consecutive values on a single line. Each delimiter is used in turn, and when the list has been exhausted, {{Mono|paste}} begins again at the first delimiter.

:-s|--serial, select to append in serial rather than in parallel; that is, horizontal rather than vertical.

The command was developed for Unix at Bell Labs by Gottfried W. R. Luderer.{{Cite web|url=https://man.openbsd.org/paste.1|title=paste(1) - OpenBSD manual pages}}{{Cite web|url=https://www.tuhs.org/pipermail/tuhs/2020-January/019955.html|title=[TUHS] A portrait of cut(1)}} The implementation bundled in GNU coreutils was written by David M. Ihnat and David MacKenzie.{{Cite web|url=https://linux.die.net/man/1/paste|title=Paste(1): Merge lines of files - Linux man page}} The command is available for Windows via UnxUtils.{{Cite web|url=http://unxutils.sourceforge.net/|title=Native Win32 ports of some GNU utilities|website=unxutils.sourceforge.net}}

Examples

For the following examples, {{Mono|names.txt}} is a plain-text file that contains:

Mark Smith

Bobby Brown

Sue Miller

Jenny Igotit

{{Mono|numbers.txt}} is another plain-text file that contains:

555-1234

555-9876

555-6743

867-5309

The following command joins the two files.

$ paste names.txt numbers.txt

Mark Smith 555-1234

Bobby Brown 555-9876

Sue Miller 555-6743

Jenny Igotit 867-5309

When invoked with the {{code|--serial}} option ({{code|-s}} on BSD or older systems), the files are joined horizontally:

$ paste --serial names.txt numbers.txt

Mark Smith Bobby Brown Sue Miller Jenny Igotit

555-1234 555-9876 555-6734 867-5309

The use of the {{code|--delimiters}} option ({{code|-d}} on BSD or older systems) is illustrated in the following example:

$ paste --delimiters . names.txt numbers.txt

Mark Smith.555-1234

Bobby Brown.555-9876

Sue Miller.555-6743

Jenny Igotit.867-5309

See also

  • {{Annotated link|cut (Unix)|cut}}
  • {{Annotated link|join (Unix)|join}}
  • {{Annotated link|List of POSIX commands}}

References

{{Reflist}}