Skip to content

Instantly share code, notes, and snippets.

@jerodsanto
Created December 13, 2011 16:00
Show Gist options
  • Save jerodsanto/1472671 to your computer and use it in GitHub Desktop.
Save jerodsanto/1472671 to your computer and use it in GitHub Desktop.
Printing the $PATH with each entry on a separate line
# using ruby:
$ echo $PATH | ruby -e 'STDIN.read.split(":").each { |l| puts l }'
$ echo $PATH | ruby -e 'print STDIN.read.gsub(":", "\n")'
# Using sed: I would expect this to work, but it does not
$ echo $PATH | sed 's/:/\n/g'
@gerhard
Copy link

gerhard commented Dec 14, 2011

Some awk love:

echo -n $PATH | awk -v RS=":" "1"
  • set the row separator (RS) to :
  • print every entry

The long form would be:

echo -n $PATH | awk 'BEGIN { RS=":" } { print $1}'

ps: I only read the tweet now.

@jerodsanto
Copy link
Author

@gerhard very nice. I figured there was a way to do it with awk, but my exposure to the tool is limited.

@gerhard
Copy link

gerhard commented Dec 14, 2011

@sant0sk1 awk is a little gem. Nothing beats it when processing large amounts of text. Single process, no optimizations whatsoever:

DATASET:
33GB (original) > 129MB (extracted)

Records extracted:
12,253,389

TIME:
real    15m37.961s
user    7m43.820s
sys 0m35.540s

That was on 4 x SAS as a software RAID5. With a few tweaks, that would become a 5min jobbie. Now imagine running that on SSDs or shared memory : ).

My most recent pride is awk scripts wrapped in shell commands, running as upstart jobs, leveraging redis pipelines to feed graphite with metrics every n seconds. All minitested, sub second for the whole test suite. I'm getting a hard-on just talking about it :D.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment