1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
|
cut(P) cut(P)
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), char-
acters ( -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 IEEE Std 1003.1-2001, 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-sepa-
rated 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 ( low- high),
which represents all fields from the first number to the
second number. The second is a positive number preceded
by a hyphen (- high), which represents all fields from
field number 1 to that number. The third is a positive
number followed by a hyphen ( low-), which represents
that number to the last field, inclusive. The elements
in list can be repeated, can overlap, and can be speci-
fied 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 sep-
arated 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-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 char-
acter 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 oper-
ands 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 internationaliza-
tion variables that are unset or null. (See the
Base Definitions volume of IEEE Std 1003.1-2001,
Section 8.2, Internationalization Variables for
the precedence of internationalization variables
used to determine the values of locale cate-
gories.)
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 mes-
sages 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 fol-
lowing):
"%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
Earlier versions of the cut utility worked in an envi-
ronment 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 IEEE Std 1003.1-2001
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>s 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>s or <tab>s in any
special fashion. The fold utility does treat these char-
acters 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
IEEE Std 1003.1-2001, 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 Utility Description Defaults .
The OPTIONS section was changed in response to IEEE PASC
Interpretation 1003.2 #149. The change represents his-
torical 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.
SEE ALSO
grep , paste , Parameters and Variables
COPYRIGHT
Portions of this text are reprinted and reproduced in
electronic form from IEEE Std 1003.1, 2003 Edition,
Standard for Information Technology -- Portable Operat-
ing System Interface (POSIX), The Open Group Base Speci-
fications Issue 6, Copyright (C) 2001-2003 by the Insti-
tute of Electrical and Electronics Engineers, Inc and
The Open Group. In the event of any discrepancy between
this version and the original IEEE and The Open Group
Standard, the original IEEE and The Open Group Standard
is the referee document. The original Standard can be
obtained online at http://www.open-
group.org/unix/online.html .
POSIX 2003 cut(P)
|