202

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?

280

Two ways:

Press Ctrl+V and then Tab.

cut -f2 -d'   ' infile

or write it like this:

cut -f2 -d$'\t' infile
178

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
  • 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
  • 2
    This should be accepted answer: simplest code, simplest explanation. ya nailed it: youtube.com/watch?v=dpNTHl7y45Y – neuronet Jun 16 '16 at 21:28
  • 4
    This answer has changed my life – matheeeny Apr 28 '17 at 13:00
  • @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 at 20:37
12
awk -F '\t' '{ print $2 }' inputfile

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

10

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.

  • 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 Mar 26 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 at 22:29
  • ...But, yeah, if the delimiter must be a tab, then my approach won't work. – nobar Mar 27 at 0:04

protected by Community Oct 23 '17 at 22:06

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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