A report with fixed-width columns will have varying numbers of spaces between the columns. You can't extract values based on field position, but you can extract them based on the character location. The cut command can select based on bytes or characters as well as fields.
It's unreasonable to enter every character position to extract, so cut accepts these notations as well as the comma-separated list:
|
N- |
From the Nth byte, character, or field, to the end of the line |
|
N-M |
From the Nth to Mth (included) byte, character, or field |
|
-M |
From the first to Mth (included) byte, character, or field |
We use the preceding notations to specify fields as a range of bytes, characters, or fields with the following options:
- -b for bytes
- -c for characters
- -f for defining fields
Consider this example:
$ cat range_fields.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxy
Display the second to fifth characters:
$ cut -c2-5 range_fields.txt
bcde
bcde
bcde
bcde
Display the first two characters:
$ cut -c -2 range_fields.txt
ab
ab
ab
ab
Replace -c with -b to count in bytes.
The -output-delimiter option specifies the output delimiter. This is particularly useful when displaying multiple sets of data:
$ cut range_fields.txt -c1-3,6-9 --output-delimiter ","
abc,fghi
abc,fghi
abc,fghi
abc,fghi