cut

selected characters or fields

cut -f list [-d delim] [-s] [file]
cut -c list [file]
cut -b list [-n] [file]

Writes portions of each line from each file or/and standard input to standard output.
list can be in terms of column position or fields delimited by a delim character.
Numbering starts from 1.

list n1 n2,n3,n4 n5 a set of increasing numbers and/or ranges separated by comma or whitespace.
range n1-n2 inclusive.
-n from 1 to n
n- from n to the end of the line.
numbers and ranges may be repeated, overlap, and occur in any order.
It is not an error to specify fields or columns not present in the input line.

-c list character positions. field form may be a better choice with data containing times, dates or numbers containing varying width fields
-f list fields separated by the field delimiter character (default: tab)
-w whitespace (spaces and tabs) as the delimiter. Consecutive spaces and tabs count as one single field seperator.
-d delim Single character field delimiter character default:tab (\t) .

With multiple spaces: substitute a + globally then
cut delimiting on + for the field then put 1 space back
Finaly restore ( + ) then use column to make back into a table.

cat file | sed "s/ \{1,99\}/+/g" |cut -d+ -f2-2 |sed "s/+/ /g" | column  -t
-sSuppress lines with no field delimiter. Default: output all lines.
-b listbyte positions (will be different from character if multi-byte characters).
-n Do not split multi-byte characters. Characters will only be output if at least one byte is selected, and, after a prefix of zero or more unselected bytes, the rest of the bytes that form the character are selected.

Return code
1 cut: bad delimiter

Specifing both -c & -f is not permitted
   On Mac OS returns 0 and displays usage!        

   usage: cut -b list [-n] [file ...]
          cut -c list [file ...]
          cut -f list [-s] [-d delim] [file ...]
       On linux returns 1 and displays:
   cut: only one type of list may be specified
   Try `cut --help' for more information.
       

ENVIRONMENT
The LANG, LC_ALL and LC_CTYPE environment variables affect cut . see environ, locale.

EXAMPLES

 /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
   1   2 3 4  5        6    7
Extract users' login names and shells from the system passwd file as name:shell pairs (i.e. 1st and 7th columns).:
cut -d : -f 1,7 /etc/passwd #select fields 1 & 7 i.e. name and shell
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin

Show the names and login times of the currently logged in users:

> who
dgerman  console  Dec 28 11:26 
samual   ttys000  Dec 30 14:44 
dger     ttys001  Dec 30 14:44 
123456789012345678901234567890

> who | cut -c -9,26-
dgerman  11:26 
samual   14:44 
dger     14:44 
Operating on fixed width fields, with right justified, space padded values is problematic with -f
> history |head
    1  2017-04-19 13:07:54 cd docs
    2  2017-04-10 10:55:00 cd computerstuff/
    3  2017-04-10 10:55:01 du
    4  2017-04-10 10:55:03 lt
    5  2017-04-10 10:55:08 du
    6  2017-04-10 10:55:10 cd raspberrypi/
    7  2017-04-10 10:55:11 du
    8  2017-04-10 10:55:13 lt
    9  2017-04-10 10:55:24 rm raspbian-jessie-lite.161125.img 
   10  2017-04-10 10:55:34 cd

 > history|cut -f5-6 -d' ' |head
1 
2 
3 
4 
5 
6 
7 
8 
9 
 2017-04-10


 > history|sed "s/ /,/g"  |head     #show varying number of leading spaces
,,,,1,,2017-04-19,13:07:54,cd,docs
,,,,2,,2017-04-10,10:55:00,cd,computerstuff/
,,,,3,,2017-04-10,10:55:01,du
,,,,4,,2017-04-10,10:55:03,lt
,,,,5,,2017-04-10,10:55:08,du
,,,,6,,2017-04-10,10:55:10,cd,raspberrypi/
,,,,7,,2017-04-10,10:55:11,du
,,,,8,,2017-04-10,10:55:13,lt
,,,,9,,2017-04-10,10:55:24,rm,raspbian-jessie-lite.161125.img,
,,,10,,2017-04-10,10:55:34,cd

The Mac OSX darwin BSD version as of 10.5.6 exits
if a copyright symbol (x'A9', © ), left double quote (x'93', “) etc,
B8, D1, C0, CF, C2, D8, D4 is encountered with the message: Illegal byte sequence and a exit status of 0.

This is easily corrected with:

export LC_ALL=C
SEE colrm, paste