提取有关的信息:尺寸&&时间&& row_count在一行shell脚本中

时间:2010-12-09 11:31:31

标签: bash

嘿每个人!我是shell脚本的新手,我被困了

我需要提取有关的信息:file_name&&尺寸&&时间&& row_count,我希望它在一个命令行中完成。我试过这样:

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

但工作不正常

我也试过循环,但我不知道从那里提取

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

然后我想重定向到这样的文件>>用于sql loader目的。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果你有GNU find和GNU coreutils(大多数Linux发行版都可以),这可能是一个开始:

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/*以反映您要探测的文件。

另请注意,如果指定了任何目录,则此单行有一些主要问题。在这方面,这应该更安全:

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

您需要查看GNU find的手册页才能更好地理解这一点。

编辑:

至少有其他更快的方法,使用join和bash进程替换,但它有点难看,有点难以保证安全并解决问题。

答案 1 :(得分:0)

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