Monday, July 23, 2012

Split command output into line with specified delimiter with a shell script

The scenario is I want to split a command output into lines for a readable purpose.
The command is from Apache Map-reduce framework.

$ hadoop classpath

/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../conf:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/tools.jar:/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/..:/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../hadoop-core-1.0.3.jar:/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/asm-3.2.jar:/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/aspectjrt-1.6.5.jar...

save the following snippet of code into mysplit.sh


#!/usr/bin/env bash


IN=`hadoop classpath`
#echo $IN
arr=$(echo $IN|tr $1 "\n")

for x in $arr
do
   echo ">[$x]"
done

$ ./mysplit.sh ":"

>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../conf]
>[/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/tools.jar]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/..]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../hadoop-core-1.0.3.jar]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/asm-3.2.jar]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/aspectjrt-1.6.5.jar]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/aspectjtools-1.6.5.jar]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/commons-beanutils-1.7.0.jar]
>[/Users/zhouyaofei/Pictures/hadoop-1.0.3/libexec/../lib/commons-beanutils-core-1.8.0.jar]