291

Here is an example of using cut to break input into fields using a space delimiter, and obtaining the second field:

cut -f2 -d' '

How can the delimiter be defined as a tab, instead of a space?

2
401

Two ways:

Press Ctrl+V and then Tab to use "verbatim" quoted insert.

cut -f2 -d'   ' infile

or write it like this to use ANSI-C quoting:

cut -f2 -d$'\t' infile
9
245

Tab is the default.

See the cut man page.

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

So you should just write

cut -f 2
6
  • 2
    Oops didn't notice that line. – Muhammad Hasan Khan Mar 30 '12 at 15:54
  • 4
    But it is probably always safer to mention such flags explicitly, for both readability and portability. I can imagine some people designing a cut for Windows would not follow the complete standard. – Willem Van Onsem Apr 19 '15 at 12:32
  • 4
    This should be accepted answer: simplest code, simplest explanation. ya nailed it: youtube.com/watch?v=dpNTHl7y45Y – neuronet Jun 16 '16 at 21:28
  • 12
    This answer has changed my life – matheeeny Apr 28 '17 at 13:00
  • 3
    @WillemVanOnsem, if someone writes a version of cut for Windows and doesn't follow the POSIX specification for it, there is no reason to assume that any POSIX script will work with that system. Stick to POSIX-specified features. Don't try to allow for hypothetical future non-compliant implementations; that's not what "portability" means. – Wildcard Mar 26 '19 at 20:37
15
awk -F '\t' '{ print $2 }' inputfile

This extracts the second tab-delimited field of each line of input from inputfile.

1
  • 1
    The OP was specifically asking about cut. Moreover, cut(1) is waaay faster than awk(1). – Tripp Kinetics May 14 '20 at 19:10
11

More generically, without requiring any invisible characters: Use tr to convert the delimiters to a format that can be specified more easily to cut.

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr is a simple, but powerful, character matching and replacement tool.

3
  • 1
    But what if the input is abc(space)def(tab)ghi? Your answer will yield def, but it should yield ghi.  Similarly, if the input is ABC(tab)DEF(space)GHI, your answer will yield DEF, but it should yield DEF(space)GHI. – G-Man Says 'Reinstate Monica' Mar 26 '19 at 20:26
  • @G-Man: The space delimiter was only an example. Use whatever delimiter is appropriate for your data -- a comma for example. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2 – nobar Mar 26 '19 at 22:29
  • ...But, yeah, if the delimiter must be a tab, then my approach won't work. – nobar Mar 27 '19 at 0:04

Not the answer you're looking for? Browse other questions tagged or ask your own question.