# cut

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           cut — cut out selected fields of each line of a file
    


## SYNOPSIS



           cut -b _list_ **[** -n**] [**_file_...**]**
    
           cut -c _list_ **[**_file_...**]**
    
           cut -f _list_ **[** -d _delim_**] [** -s**] [**_file_...**]**
    


## DESCRIPTION



           The _cut_ utility shall cut out bytes (**-b** option), characters (**-c**
           option), or character-delimited fields (**-f** option) from each line
           in one or more files, concatenate them, and write them to standard
           output.
    


## OPTIONS



           The _cut_ utility shall conform to the Base Definitions volume of
           POSIX.1‐2017, _Section 12.2_ , _Utility Syntax Guidelines_.
    
           The application shall ensure that the option-argument _list_ (see
           options **-b** , **-c** , and **-f** below) is a <comma>-separated list or
           <blank>-separated list of positive numbers and ranges. Ranges can
           be in three forms. The first is two positive numbers separated by
           a <hyphen-minus> (_low_ -_high_), which represents all fields from the
           first number to the second number. The second is a positive number
           preceded by a <hyphen-minus> (-_high_), which represents all fields
           from field number 1 to that number. The third is a positive number
           followed by a <hyphen-minus> (_low_ -), which represents that number
           to the last field, inclusive. The elements in _list_ can be
           repeated, can overlap, and can be specified in any order, but the
           bytes, characters, or fields selected shall be written in the
           order of the input data. If an element appears in the selection
           list more than once, it shall be written exactly once.
    
           The following options shall be supported:
    
           **-b** _list_   Cut based on a _list_ of bytes. Each selected byte shall
                     be output unless the **-n** option is also specified. It
                     shall not be an error to select bytes not present in the
                     input line.
    
           **-c** _list_   Cut based on a _list_ of characters. Each selected
                     character shall be output. It shall not be an error to
                     select characters not present in the input line.
    
           **-d** _delim_  Set the field delimiter to the character _delim_.  The
                     default is the <tab>.
    
           **-f** _list_   Cut based on a _list_ of fields, assumed to be separated
                     in the file by a delimiter character (see **-d**).  Each
                     selected field shall be output. Output fields shall be
                     separated by a single occurrence of the field delimiter
                     character. Lines with no field delimiters shall be
                     passed through intact, unless **-s** is specified. It shall
                     not be an error to select fields not present in the
                     input line.
    
           **-n** Do not split characters. When specified with the **-b**
                     option, each element in _list_ of the form _low_ -_high_
                     (<hyphen-minus>-separated numbers) shall be modified as
                     follows:
    
                      *  If the byte selected by _low_ is not the first byte of
                         a character, _low_ shall be decremented to select the
                         first byte of the character originally selected by
                         _low_.  If the byte selected by _high_ is not the last
                         byte of a character, _high_ shall be decremented to
                         select the last byte of the character prior to the
                         character originally selected by _high_ , or zero if
                         there is no prior character. If the resulting range
                         element has _high_ equal to zero or _low_ greater than
                         _high_ , the list element shall be dropped from _list_
                         for that input line without causing an error.
    
                     Each element in _list_ of the form _low_ - shall be treated
                     as above with _high_ set to the number of bytes in the
                     current line, not including the terminating <newline>.
                     Each element in _list_ of the form -_high_ shall be treated
                     as above with _low_ set to 1. Each element in _list_ of the
                     form _num_ (a single number) shall be treated as above
                     with _low_ set to _num_ and _high_ set to _num_.
    
           **-s** Suppress lines with no delimiter characters, when used
                     with the **-f** option. Unless specified, lines with no
                     delimiters shall be passed through untouched.
    


## OPERANDS



           The following operand shall be supported:
    
           _file_      A pathname of an input file. If no _file_ operands are
                     specified, or if a _file_ operand is **'-'** , the standard
                     input shall be used.
    


## STDIN



           The standard input shall be used only if no _file_ operands are
           specified, or if a _file_ operand is **'-'**.  See the INPUT FILES
           section.
    


## INPUT FILES



           The input files shall be text files, except that line lengths
           shall be unlimited.
    


## ENVIRONMENT VARIABLES



           The following environment variables shall affect the execution of
           _cut_ :
    
           _LANG_      Provide a default value for the internationalization
                     variables that are unset or null. (See the Base
                     Definitions volume of POSIX.1‐2017, _Section 8.2_ ,
                     _Internationalization Variables_ for the precedence of
                     internationalization variables used to determine the
                     values of locale categories.)
    
           _LC_ALL_    If set to a non-empty string value, override the values
                     of all the other internationalization variables.
    
           _LC_CTYPE_  Determine the locale for the interpretation of sequences
                     of bytes of text data as characters (for example,
                     single-byte as opposed to multi-byte characters in
                     arguments and input files).
    
           _LC_MESSAGES_
                     Determine the locale that should be used to affect the
                     format and contents of diagnostic messages written to
                     standard error.
    
           _NLSPATH_   Determine the location of message catalogs for the
                     processing of _LC_MESSAGES_.
    


## ASYNCHRONOUS EVENTS



           Default.
    


## STDOUT



           The _cut_ utility output shall be a concatenation of the selected
           bytes, characters, or fields (one of the following):
    
               "%s\n", <_concatenation of bytes_ >
    
               "%s\n", <_concatenation of characters_ >
    
               "%s\n", <_concatenation of fields and field delimiters_ >
    


## STDERR



           The standard error shall be used only for diagnostic messages.
    


## OUTPUT FILES



           None.
    


## EXTENDED DESCRIPTION



           None.
    


## EXIT STATUS



           The following exit values shall be returned:
    
            0    All input files were output successfully.
    
           >0    An error occurred.
    


## CONSEQUENCES OF ERRORS



           Default.
    
           _The following sections are informative._
    


## APPLICATION USAGE



           The _cut_ and _fold_ utilities can be used to create text files out of
           files with arbitrary line lengths. The _cut_ utility should be used
           when the number of lines (or records) needs to remain constant.
           The _fold_ utility should be used when the contents of long lines
           need to be kept contiguous.
    
           Earlier versions of the _cut_ utility worked in an environment where
           bytes and characters were considered equivalent (modulo
           <backspace> and <tab> processing in some implementations). In the
           extended world of multi-byte characters, the new **-b** option has
           been added. The **-n** option (used with **-b**) allows it to be used to
           act on bytes rounded to character boundaries.  The algorithm
           specified for **-n** guarantees that:
    
               cut -b 1-500 -n file > file1
               cut -b 501- -n file > file2
    
           ends up with all the characters in **file** appearing exactly once in
           **file1** or **file2**.  (There is, however, a <newline> in both **file1** and
           **file2** for each <newline> in **file**.)
    


## EXAMPLES



           Examples of the option qualifier list:
    
           1,4,7   Select the first, fourth, and seventh bytes, characters,
                   or fields and field delimiters.
    
           1-3,8   Equivalent to 1,2,3,8.
    
           -5,10   Equivalent to 1,2,3,4,5,10.
    
           3-      Equivalent to third to last, inclusive.
    
           The _low_ -_high_ forms are not always equivalent when used with **-b** and
           **-n** and multi-byte characters; see the description of **-n**.
    
           The following command:
    
               cut -d : -f 1,6 /etc/passwd
    
           reads the System V password file (user database) and produces
           lines of the form:
    
               <_user ID_ >:<_home directory_ >
    
           Most utilities in this volume of POSIX.1‐2017 work on text files.
           The _cut_ utility can be used to turn files with arbitrary line
           lengths into a set of text files containing the same data. The
           _paste_ utility can be used to create (or recreate) files with
           arbitrary line lengths. For example, if **file** contains long lines:
    
               cut -b 1-500 -n file > file1
               cut -b 501- -n file > file2
    
           creates **file1**(a text file) with lines no longer than 500 bytes
           (plus the <newline>) and **file2** that contains the remainder of the
           data from **file**.  (Note that **file2** is not a text file if there are
           lines in **file** that are longer than 500 + {LINE_MAX} bytes.) The
           original file can be recreated from **file1** and **file2** using the
           command:
    
               paste -d "\0" file1 file2 > file
    


## RATIONALE



           Some historical implementations do not count <backspace>
           characters in determining character counts with the **-c** option.
           This may be useful for using _cut_ for processing _nroff_ output. It
           was deliberately decided not to have the **-c** option treat either
           <backspace> or <tab> characters in any special fashion. The _fold_
           utility does treat these characters specially.
    
           Unlike other utilities, some historical implementations of _cut_
           exit after not finding an input file, rather than continuing to
           process the remaining _file_ operands. This behavior is prohibited
           by this volume of POSIX.1‐2017, where only the exit status is
           affected by this problem.
    
           The behavior of _cut_ when provided with either mutually-exclusive
           options or options that do not work logically together has been
           deliberately left unspecified in favor of global wording in
           _Section 1.4_ , _Utility Description Defaults_.
    
           The OPTIONS section was changed in response to IEEE PASC
           Interpretation 1003.2 #149. The change represents historical
           practice on all known systems. The original standard was ambiguous
           on the nature of the output.
    
           The _list_ option-arguments are historically used to select the
           portions of the line to be written, but do not affect the order of
           the data. For example:
    
               echo abcdefghi | cut -c6,2,4-7,1
    
           yields **"abdefg"**.
    
           A proposal to enhance _cut_ with the following option:
    
           **-o** Preserve the selected field order. When this option is
                 specified, each byte, character, or field (or ranges of
                 such) shall be written in the order specified by the _list_
                 option-argument, even if this requires multiple outputs of
                 the same bytes, characters, or fields.
    
           was rejected because this type of enhancement is outside the scope
           of the IEEE P1003.2b draft standard.
    


## FUTURE DIRECTIONS



           None.
    


* * *