求shell 高手。。。!!!

素年 2012-02-08 11:15:43

新手能看懂shell 求高手帮忙写一下。。

有一个目录,下面有很多文件。文件名格式固定。如:
D20120208.05_20120208.06_DAA
D20120208.06_20120208.07_DAA
D20120208.07_20120208.08_DAA

D20120208.05_20120208.06_BOD
D20120208.06_20120208.07_BOD
D20120208.07_20120208.08_BOD

文件里面有许多字段,每一种业务类型有不同的字段,比如说 DAA里面有name,age,sal。 BOD里面有name,age,sess。

现在传入一个文件名,和某些字段。比如说 D20120208.05_20120208.06_DAA,name,age。

就需要解析所有DAA类型的文件以及查询name,age字段,需要计算age字段。

解析每一个文件需要记录日志,该文件已经被解析过了。并且输出一个文件里面有name,age字段(文件名不变,存放

在另一目录)。

如果输入了 D20120208.05_20120208.06_DAA,name,age,07。

需要解析 07 点以前的文件,如果已经被解析过,就不需要解析了。输入参数的长度不会超过10个。

求高手挑战一下,帮帮小弟,刚刚学习shell。谢谢。
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
素年 2012-02-13
  • 打赏
  • 举报
回复
但是这个是 perl啊!!!!


我需要的是 shell。。 - -
素年 2012-02-13
  • 打赏
  • 举报
回复
谢谢!!!
jialejiahi 2012-02-11
  • 打赏
  • 举报
回复
根据楼主的描述,
假设数据文件D20120208.05_20120208.06_DAA如下:

name age sex wage
liu 25 male 3456
zhang 27 female 4567

D20120208.08_20120208.09_DAA 如下

name age sex wage
ma 26 male 3856
sun 26 female 4667

脚本如下:

#!/bin/sh

parse()
{
echo $file |tee -a parsed
awk -v cols="$args" '
BEGIN {
}
NR==1 {
for (i=1;i<=NF;i++) {
if (index(cols, $i) > 0)
field[i]=$i
}
}
{
for (i in field)
printf ("%s \t", $i)
printf("\n")
}' $file
}
args=$*
if echo $args | grep -q " *[0-9][0-9] *$"; then
file=${args%% *}
time=${args##* }
args=${args#* }
args=${args% *}
for file in $(ls); do
f2=$(echo $file|awk -F[._] '{print $2}')
f4=$(echo $file|awk -F[._] '{print $4}')

echo $f2 | grep -q "^[0-9][0-9]$" || continue
echo $f4 | grep -q "^[0-9][0-9]$" || continue
if [ $f2 -lt $time -a $f4 -lt $time ]; then
if ! grep -q "$file" parsed; then
parse |tee -a result
fi
fi
done
else
file=${args%% *}
args=${args#* }
if ! grep -q "$file" parsed; then
parse |tee -a result
fi
fi

执行效果如下:

# ./parse.sh D20120208.05_20120208.06_DAA name sex 10
D20120208.05_20120208.06_DAA
name sex
liu male
zhang female
D20120208.08_20120208.09_DAA
name sex
ma male
sun female
tianxiaolin 2012-02-10
  • 打赏
  • 举报
回复
说的都不清楚,让人怎么帮你?

弄一堆特殊字符,看着就没有心情了.
标题也不直接写问题,求shell高手?
justkk 2012-02-09
  • 打赏
  • 举报
回复
题意表述不明确,功能点没描述清楚
Linux-Torvalds 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 qq3138298 的回复:]
新手能看懂shell 求高手帮忙写一下。。

有一个目录,下面有很多文件。文件名格式固定。如:
D20120208.05_20120208.06_DAA
D20120208.06_20120208.07_DAA
D20120208.07_20120208.08_DAA

D20120208.05_20120208.06_BOD
D20120208.06_20120208.07_BO……
[/Quote]怎么说也许要拿几个示例文件上来吧?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧