Gbyte
July 13, 2009, 12:29pm
1
Hi,
I following example I'm trying to separate teh deirectory name and file name. File name is separated by sed -e is not working. The last command prints /oradb/data/my_arch_1_1285.arc while I need the output as /oradb/data/. Please help.
STREAM_LOG="/oradb/data/my_arch_1_1285.arc"
file_name=`echo $STREAM_LOG |awk -F"/" '{ print $NF }'`
echo $file_name
dir_name=`echo $STREAM_LOG |sed -e 's/$file_name$//g'`
echo $dir_name
Use built in shell commands:
file_name=`echo ${STREAM_LOG##*/}`
dir_name=`echo ${STREAM_LOG%/*}`
Regards
#!/bin/ksh
STREAM_LOG="/oradb/data/my_arch_1_1285.arc"
file_name="${STREAM_LOG##*/}"
dir_name="${STREAM_LOG%/*}"
echo "file_name->[${file_name}]"
echo "dir_name->[${dir_name}]"
Gbyte
July 13, 2009, 12:48pm
4
Wow... Thanks a lot Franklin for quick and easy solution.
gbyte:
Hi,
I following example I'm trying to separate teh deirectory name and file name. File name is separated by sed -e is not working. The last command prints /oradb/data/my_arch_1_1285.arc while I need the output as /oradb/data/. Please help.
STREAM_LOG="/oradb/data/my_arch_1_1285.arc"
file_name=`echo $STREAM_LOG |awk -F"/" '{ print $NF }'`
echo $file_name
dir_name=`echo $STREAM_LOG |sed -e 's/$file_name$//g'`
echo $dir_name
There are commands like basename and dirname to do this job.
However, w.r.t your example:
file_name=`echo $STREAM_LOG |awk -F"/" '{ print $NF }'`
dir_name=`echo $STREAM_LOG | sed 's!\(.*\)/.*!\1!' `
STREAM_LOG="/oradb/data/my_arch_1_1285.arc"
basename $STREAM_LOG
dirname $STREAM_LOG
or:
echo ${STREAM_LOG##*/}
echo ${STREAM_LOG%/*}