免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2505 | 回复: 15
打印 上一主题 下一主题

红袖姐请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-19 02:38 |只看该作者 |倒序浏览
假如有一文件test.txt如下:
20/11/2001;13h45-15h15;Liming;class1;www.yahoo.com;aaaa
20/11/2002;15h15-16h45;Xiaohong;class2;www.sina.com;ttt
07/11/2001;09h-12h15;mimi;class3;time.pdf;rrrr
如何实现:1。将test.txt转化为HTML文件,且当我点击www.yahoo.com或者time.pdf能转到相应的网页和相应的.pdf文件
2。如何实现如我随意输入一个时间,能将此时间所在的一周的所有信息查询出来并按照从周一到周五的时间排序,如为同一天则按照时间排序。
我真的是一头雾水,不知从何下手,不知红袖姐可否指点一番?
谢谢你,红袖姐!

论坛徽章:
0
2 [报告]
发表于 2003-03-19 07:40 |只看该作者

红袖姐请进

...

1.


  1. TITLE="My page"

  2. cat <<EOF
  3. <HTML>
  4. <HEAD><TITLE>
  5. $TITLE
  6. </TITLE></HEAD>
  7. <BODY>
  8. <TABLE>
  9. EOF

  10. nawk -F";" '{
  11. print "<TR>"
  12. print "<TD>"$1"</TD>"
  13. print "<TD>"$2"</TD>"
  14. print "<TD>"$3"</TD>"
  15. print "<TD>"$4"</TD>"
  16. print "<TD><a href=\x22" $5 "\x22>"$5"</a>"
  17. print "<TD>"$6"</TD>"
  18. print "</TR>"
  19. } ' file

  20. cat <<EOF
  21. </TABLE>
  22. </BODY>
  23. </HTML>
  24. EOF
复制代码


2. 这里用的是方便输入和符合中国人习惯的时间格式 yyyymmdd,如果你愿意,也可以改成日志文件中的格式,dd/mm/yyyy,并作相应修改

  1. input=$1

  2. yyyy=`echo $input | cut -c 1-4`
  3. mm=`echo $input | cut -c 5-6`
  4. dd=`echo $input | cut -c 7-8`

  5. for date in `cal $mm $yyyy | grep -w "$dd" | awk '{print $2,$3,$4,$5,$6}'`; do
  6.     datestr="$date/$mm/$yyyy"
  7.     grep "$datestr" file
  8. done
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-03-19 21:19 |只看该作者

红袖姐请进

红袖姐姐,我还是有一些地方不是很明白,麻烦你给我讲解一下
1。print "<TD><a href=\x22" $5 "\x22>"$5"</a>" 中\x22是什么意  思?<a href>与"</a>" 是代表什么呢?
2。为什么在开头和结尾都要带上
cat <<EOF
<HTML>
<HEAD><TITLE>
$TITLE
</TITLE></HEAD>
<BODY>
<TABLE>
EOF

cat <<EOF
</TABLE>
</BODY>
</HTML>
EOF 呢?
3。在时间的排序上如果我要带上每一天按钟点数排序由该怎么实现呢?是在原来的for循环里在嵌套一个循环么?具体应该怎么写呢?
真得十分感谢你红袖姐姐!!

论坛徽章:
0
4 [报告]
发表于 2003-03-20 03:35 |只看该作者

红袖姐请进

...

> 1。print "<TD><a href=\x22" $5 "\x22>"$5"</a>" 中\x22是什么意 思?<a href>
> 与"</a>" 是代表什么呢?

这“\x22”是用16进制打印双引号,因为这里有与句子本身的双引号冲突
<a href=...> </a> 是 HTML 中的链接的语句的写法,其它还有不明白的查一下 HTML 手册就行了。

> 2。为什么在开头和结尾都要带上
> cat <<EOF
> <HTML>
> ...

这是 HTML 文本的固定结构。
也可以 echo 来产生,但是这里变量少,常量字符串多,用 cat 方便

> 在时间的排序上如果我要带上每一天按钟点数排序由该怎么实现呢?是在原来的for循环里
> 在嵌套一个循环么?具体应该怎么写呢?

带上钟点的话,应该也是可以的,用 sort 加上相应的域的定义就可以起到排序作用,但是你的日志中并没有时间项啊。

论坛徽章:
0
5 [报告]
发表于 2003-03-20 06:01 |只看该作者

红袖姐请进

谢谢红袖姐姐,我明白了很多,我还是有几个不是很明白的地方
test.txt文件:
20/11/2001;13h45-15h15;Liming;class1;www.sina.com;aaaa
20/11/2001;07h45-12h15;yoyo;class1;www.yahoo.com;bbbb
1。如果我是要点击字段“yoyo”就可以连接到相应的网页“www.yahoo.com”上,那我是应该print "<TD><a href=\x22" $5 "\x22>"$5"</a>" 呢还是print "<TD><a href=\x22" $5 "\x22>"$3"</a>" ?
2。如上的test.txt文件均是20/11/2001这一天的,故我要在排序的时候用时间而不是日期,我应该怎么实现呢?
3。当我输入一个日期的时候我怎么能够将本周从周一到周五的日期找出来呢?比如我要输入20011120,我怎样才能找出包含此日期的从周一到周五的所有记录并排序显示呢?
谢谢你了,红袖姐姐,总是问你一些这么初级的问题,真不好意思。

论坛徽章:
0
6 [报告]
发表于 2003-03-20 06:57 |只看该作者

红袖姐请进

...


> 1。如果我是要点击字段“yoyo”就可以连接到相应的网页“www.yahoo.com”上,那我是应
> 该print "<TD><a href=\x22" $5 "\x22>"$5"</a>" 呢还是print "<TD><a href=\x22" $5 > "\x22>"$3"</a>" ?

后者,也就是出来的效果是 <a href="www.yahoo.com">yoyo</a>


> 2。如上的test.txt文件均是20/11/2001这一天的,故我要在排序的时候用时间而不是日>
> 期,我应该怎么实现呢?

# sort -t";" +1 -2 test.txt


> 3。当我输入一个日期的时候我怎么能够将本周从周一到周五的日期找出来呢?比如我要输
> 入20011120,我怎样才能找出包含此日期的从周一到周五的所有记录并排序显示呢?

在 二楼的帖子中已经回答你了,可能你没注意。 第2段代码个就是


> 谢谢你了,红袖姐姐,总是问你一些这么初级的问题,真不好意思。

不用客气,也没什么不好意思的,谁也不是天生都的。 :)

论坛徽章:
0
7 [报告]
发表于 2003-03-20 19:39 |只看该作者

红袖姐请进

红袖姐姐,我依然还是有问题:
1。为什么我在vi里即使不输入“!/bin/sh”程序依然可以顺利执行呢?
2。我将“# sort -t";" +1 -2 test.txt”放入了循环里面,为什么就总是出错呢?难道不是放入for循环中么?那它应该放在哪里呢?
3。为什么我分别执行代码1和代码2时都能正确执行,而我就两段代码写到一起时不能正常显示结果呢?(我将两段代码写到一起,然后用命令:
./con 20020401时就不能像两段代码分开执行时能运行出结果)
4。我是想当我运行命令:./con 20020401 时,若时间20020401存在就以html的形式显示包含20020401这一天的本周周一到周五的纪录(按升序),如不存在就将text.txt文件中的所用纪录以html的形式显示(按日期和时间以升序排序)。
5。红袖姐姐是怎么学习shell编程的?介绍一下方法好么?或者推荐一本好书好么?
谢谢你,红袖姐姐!

论坛徽章:
0
8 [报告]
发表于 2003-03-20 20:17 |只看该作者

红袖姐请进

...

> 1。为什么我在vi里即使不输入“!/bin/sh”程序依然可以顺利执行呢?

不写这个解释器的位置,它就用默认的 shell,正好是一致时是可以的,但是如果它是 #!/bin/csh,  #!/usr/bin/perl 之类的就可能得写了,不然会报错

> 2。我将“# sort -t";" +1 -2 test.txt”放入了循环里面,为什么就总是出错呢?
> 难道不是放入for循环中么?那它应该放在哪里呢?

不用循环,用来对整个 test.txt 排序

> 3。为什么我分别执行代码1和代码2时都能正确执行,
> 而我就两段代码写到一起时不能正常显示结果呢?(我将两段代码写到一起,然后用命令:
> ./con 20020401时就不能像两段代码分开执行时能运行出结果)

这个我等会有时间帮你查看一下,现在有好多帖子要回,:)

> 4。我是想当我运行命令:./con 20020401 时,若时间20020401存在就以html的形式显示
> 包含20020401这一天的本周周一到周五的纪录(按升序),如不存在就将text.txt 文件中
> 的所用纪录以html的形式显示(按日期和时间以升序排序)。

同上

> 5。红袖姐姐是怎么学习shell编程的?介绍一下方法好么?或者推荐一本好书好么?

以前看过一本 UNIX 入门的书,也讲到shell,不过名字已经忘记了,我是从那儿开始入门的。 置顶的帖子中好象有斑竹的 ftp 和一些中文版的好书,应该会更好。

论坛徽章:
0
9 [报告]
发表于 2003-03-21 01:17 |只看该作者

红袖姐请进

红袖姐姐, 我又试了,还是不行,我是在是太水平有限了,真是麻烦你了红袖姐姐

论坛徽章:
0
10 [报告]
发表于 2003-03-21 03:11 |只看该作者

红袖姐请进

...

(不好意思,现在才又有空)

> 3。为什么我分别执行代码1和代码2时都能正确执行,而我就两段代码写到一起时不能正常
> 显示结果呢?(我将两段代码写到一起,然后用命令:
> ./con 20020401时就不能像两段代码分开执行时能运行出结果)

有可能是拷贝过程中出了差错,检查 EOF 后面有没有空格,有的话要删除.


> 4。我是想当我运行命令:./con 20020401 时,若时间20020401存在就以html的形式显示
> 包含20020401这一天的本周周一到周五的纪录(按升序),如不存在就将text.txt文件中的
> 所用纪录以html的形式显示(按日期和时间以升序排序)。

如果是要经常用到这个功能的话,可以做子函数,将来还可以方便调用,这样

  1. #!/bin/sh

  2. input=$1
  3. logfile='log.txt'
  4. TITLE="My page"

  5. txt2html() {
  6.     cat <<EOF
  7.     <HTML>
  8.     <HEAD><TITLE>
  9.     $TITLE
  10.     </TITLE></HEAD>
  11.     <BODY>
  12.     <TABLE>
  13. EOF

  14. nawk -F";" '{
  15.     print "<TR>"
  16.     print "<TD>"$1"</TD>"
  17.     print "<TD>"$2"</TD>"
  18.     print "<TD>"$3"</TD>"
  19.     print "<TD>"$4"</TD>"
  20.     print "<TD><a href=\x22" $5 "\x22>"$5"</a>"
  21.     print "<TD>"$6"</TD>"
  22.     print "</TR>"
  23.   } ' $1

  24.     cat <<EOF
  25.     </TABLE>
  26.     </BODY>
  27.     </HTML>
  28. EOF
  29. }


  30. yyyy=`echo $input | cut -c 1-4`
  31. mm=`echo $input | cut -c 5-6`
  32. dd=`echo $input | cut -c 7-8`
  33. datestr="$dd/$mm/$yyyy"

  34. grep "$datestr" $logfile > /dev/null

  35. if [ $? -ne 0 ]; then
  36.     sort -n -t'/' +2 -3 +1 -2 +0 -1  $logfile >  file.tmp
  37. else
  38.     for date in `cal $mm $yyyy | grep -w "$dd" | awk '{print $2,$3,$4,$5,$6}'`;
  39. do
  40.          grep "$date/$mm/$yyyy" $logfile
  41.     done | sort -n -t'/' +2 -3 +1 -2 +0 -1  > file.tmp
  42. fi

  43. txt2html  file.tmp && rm file.tmp
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP