Paste (Unix)

Shell command for joining files horizontally

paste

Original author(s)| AT&T Bell Labs
Developer(s)| GNU Project
Initial release| 1973 (as part of Version 4 Unix)
Written in| C
Operating system| Unix, Unix-like (Linux, macOS)
Platform| POSIX-compliant systems, Cross-platform
Type| Command-line utility
License| coreutils: GPL v3+
Website| GNU manual

`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, 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.[1][2] The implementation bundled in GNU coreutils was written by David M. Ihnat and David MacKenzie.[3] The command is available for Windows via UnxUtils.[4]

## Examples

[edit]

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

Mark Smith
Bobby Brown
Sue Miller
Jenny Igotit

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 `--serial` option (`-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 `--delimiters` option (`-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

[edit]

* cut – Command line utility
* join – Command in Unix-like operating systems
* List of POSIX commands

## References

[edit]

1. ^ "paste(1) - OpenBSD manual pages".
2. ^ "[TUHS] A portrait of cut(1)".
3. ^ "Paste(1): Merge lines of files - Linux man page".
4. ^ "Native Win32 ports of some GNU utilities". unxutils.sourceforge.net.

## External links

[edit]

The Wikibook Guide to Unix has a page on the topic of: Commands

* "PASTE(1) - FreeBSD General Commands Manual". Retrieved 2010-08-12.

* v
* t
* e

Unix command-line interface programs and shell builtins

File system|

* cat
* chattr
* chmod
* chown
* chgrp
* cksum
* cmp
* cp
* dd
* du
* df
* file
* fuser
* ln
* ls
* mkdir
* mv
* pax
* pwd
* rm
* rmdir
* split
* tee
* touch
* type
* umask

Processes|

* at
* bg
* crontab
* fg
* kill
* nice
* ps
* time

User environment|

* env
* exit
* logname
* mesg
* talk
* tput
* uname
* who
* write

Text processing|

* awk
* basename
* comm
* csplit
* cut
* diff
* dirname
* ed
* ex
* fold
* head
* iconv
* join
* m4
* more
* nl
* paste
* patch
* printf
* read
* sed
* sort
* strings
* tail
* tr
* troff
* uniq
* vi
* wc
* xargs

Shell builtins|

* alias
* cd
* echo
* test
* unset
* wait

Searching|

* find
* grep

Documentation|

* man

Software development|

* ar
* ctags
* lex
* make
* nm
* strip
* yacc

Miscellaneous|

* bc
* cal
* expr
* lp
* od
* sleep
* true and false

* Categories
* Standard Unix programs
* Unix SUS2008 utilities
* List

* v
* t
* e

GNU Core Utilities command-line interface programs

File system|

* chcon
* chmod
* chown
* chgrp
* cksum
* cp
* dd
* df
* dir
* dircolors
* install
* ln
* ls
* mkdir
* mkfifo
* mknod
* mktemp
* mv
* realpath
* rm
* rmdir
* shred
* sync
* touch
* truncate
* vdir

Text utilities|

* b2sum
* base32
* base64
* cat
* cksum
* comm
* csplit
* cut
* expand
* fmt
* fold
* head
* join
* md5sum
* nl
* numfmt
* od
* paste
* ptx
* pr
* sha1sum
* shuf
* sort
* split
* sum
* tac
* tail
* tr
* tsort
* unexpand
* uniq
* wc

Shell utilities|

* arch
* basename
* chroot
* date
* dirname
* du
* echo
* env
* expr
* factor
* false
* groups
* hostid
* id
* link
* logname
* nice
* nohup
* nproc
* pathchk
* pinky
* printenv
* printf
* pwd
* readlink
* runcon
* seq
* sleep
* stat
* stdbuf
* stty
* tee
* test
* timeout
* true
* tty
* uname
* unlink
* uptime
* users
* who
* whoami
* yes

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template