开发者

extract information regarding : size && time && row_count in one line shell script

Hey every one! I am pretty new for shell script and I am stuck

I need to extract information regarding: file_name && size && time && row_count and I want it do in o开发者_开发知识库ne command line. I tried like this :

ls -l * && wc -l file.txt && du -ks file.txt | cut -f1| awk '{print $5" " $6 " " $7 " "$8 " " $9 " "$1 " "$2}'

but is not working properly

I also tried do in loop but i dont know how extract from there

for file in `ls -ltr  /export/home/oracle/dbascripts/scripts`
do
[[ -f $file ]] && echo $file | awk '{print $3}'
done

Then I want to redirect to file like this >> for sql loader purpose. Thanks in advance!


This could be a start if you have GNU find and GNU coreutils (most Linux distribution will do):

for i in /my/path/*; do
    find "$i" ! -type d -printf '%p %TY-%Tm-%Td %TH:%TM:%TS %s '

    wc -l <"$i"
done

/my/path/* should be modified to reflect the files you want to probe.

Also keep in mind that this one-liner has a few major issues if any directories are specified. This should be safer in that regard:

for i in *; do
    if [[ -d "$i" ]]; then
        continue
    fi

    find "$i" -printf '%p %TY-%Tm-%Td %TH:%TM:%TS %s '

    wc -l <"$i"
done

You will want to see the manual page for GNU find to understand this better.

EDIT:

There is at least other faster way, using join and bash process substitution, but it's a bit ugly and somewhat harder to make safe and work the kinks out of.


ExtractInformation()
{
timesep="-"
sep="|"
dot=":"
sec="00"

lcount=`wc -l < $fname`
modf_time=`ls -l $fname`
f_size=`echo $modf_time | awk '{print $5}'`
time_month=`echo $modf_time | awk '{print $6}'`
time_day=`echo $modf_time | awk '{print $7}'`
time_hrmin=`echo $modf_time | awk '{print $8}'`
time_hr=`echo $time_hrmin | cut -d ':' -f1`
time_min=`echo $time_hrmin | cut -d ':' -f2`
time_year=`date '+%Y'`
time_param="DD-MON-YYYY HH24:MI:SS"
time_date=$time_day$timesep$time_month$timesep$time_year" "$time_hrmin$dot$sec


result=$fname$sep$time_date$sep$f_size$sep$lcount$sep$time_param


sqlresult=`echo $result | awk '{FS = "|" ;q=sprintf("%c", 39); print "INSERT INTO SIP_ICMS_FILE_T(f_name, f_date_time,f_size,f_row_count) VALUES (" q $1 q ", TO_DATE("q $2 q,q $5 q "),"$3","$4");";}'`

echo $sqlresult>>data.sql
echo "Reading data....."
}

UploadData()
{
#ss=`sqlplus -s a/a@adb  @data.sql
#set serveroutput on
#set feedback off
#set echo off`
echo "loading with sql Loader....."
}

f_data=data.sql
[[ -f $f_data ]] && rm data.sql
for fname  in * ;
do
if [[ -f $fname ]] then
ExtractInformation
fi
UploadData
#Zipdata
done
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜