LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: jiazhengw

多发发一些有意思的题做做呀![+sed/awk/regex练习]

[复制链接]
发表于 2006-3-3 13:09:35 | 显示全部楼层
晕 我输错了 请斑竹试试这个命令
$./sort.b second |sed '$d' | ./sort.a
我把两个文件的名字写反了.
:sorry
回复 支持 反对

使用道具 举报

发表于 2006-3-3 13:26:03 | 显示全部楼层
Post by yongjian
这是我做的习题一的代码,在自己的机子上运行结果正确,不过看来还得在其他人的机器上试试才行。
第一个文件叫cmd1,第二个文件叫cmd1_desc.
sed:

  1. for i in $(seq 1 $(wc -l cmd1|sed 's/\(^.*\) .*/\1/g')); do j=$(cat cmd1_desc | sed -n 'H;/^$/{x;s/\n/ /g;G;p;}'|sed '/^ $/d;/^$/d;s/ \+/ /g' | sed -n ''$i'p'); k=$(cat cmd1 | sed -n ''$i's/.*/&:/p' | sed '$a\'"$j"'');echo -e "$k\n" ;done | sed '$d'
复制代码

awk:

  1. awk 'BEGIN{FS="\n";RS=""};gsub(/\n/," ")' cmd1_desc| awk 'gsub(/ +/," ")' | awk 'getline cmd < "cmd1";{print cmd":"}' | awk '{if((getline tmp)>0){print tmp;print $0"\n"}}' | awk '{if(NR == 1){str=$0}else{print str;str=$0}}'
复制代码


yongjian兄的代码在我的机器上运行正常哦,厉害
一会儿没上就这么多答复,呵呵,奇怪了,我的代码在你们机器上运行不正常吗?我的完全没问题哦。搞不懂了,我在看看哦

to shizi4838
关于getline,当它读到文件尾时会返回0值的,awk的man里写着,小弟做了个测试,如果读到文件尾后,那接下来的程序就不会读了。
回复 支持 反对

使用道具 举报

发表于 2006-3-3 13:29:48 | 显示全部楼层
yongjian兄的脚本我试过了,没有错的,写的很精练,可见对sed和awk的用法掌握的很牢固,值得学习.
回复 支持 反对

使用道具 举报

发表于 2006-3-3 13:34:21 | 显示全部楼层
小弟把九楼的程序稍微改了一下,大家看看行不行




  1. # filename: sort.a

  2. BEGIN { getline title < "first"; print title":" }

  3. {

  4. if ($0 == "") {
  5. getline title < "first"
  6. print "\n\n"title":"
  7. while (getline) {
  8. if ($0 != "") break
  9. }

  10. }

  11. for (i=1;i<=NF;i++) printf "%s ",$i

  12. }

  13. END { print "" }

复制代码
回复 支持 反对

使用道具 举报

发表于 2006-3-3 13:39:17 | 显示全部楼层
恩,现在没有那个死循环的问题了,但输出的结尾多了个

fdisk:

嘿嘿,以前的那个到底是不是死循环啊?
回复 支持 反对

使用道具 举报

发表于 2006-3-3 14:16:04 | 显示全部楼层
我测试过了,应该是死循环,getline到了文件的末尾,无法获得一个新行,$0始终指向文件的最后一行,
另外,johnny兄,getline到了文件的结尾返回的是个非0吧,也就是假.
至于输出多出来的那个fdisk:,应该是因为文件末尾有空行的原因,要用34楼这个程序应该先把文件second末尾的空行去掉.
回复 支持 反对

使用道具 举报

发表于 2006-3-3 14:19:20 | 显示全部楼层
这个帖子真不错,我分析大家的程序能学到好多东西,我可以看出来yongjian兄和Johnny兄都是写程序的好手,以后还望多多指教.

:p
回复 支持 反对

使用道具 举报

发表于 2006-3-3 14:26:08 | 显示全部楼层

出一道题,美国大学的Unix课程设计题:)

#######
#
# CS385 Unix/Linux Shell Programming and System Administration
#
# FINAL PROJECT
#
#
#######

Write a shell [not Perl or other] script to validate URL links in a bookmark file(exported from IE) per following requirements:

1. The script should display a menu-based question to show the URL and offer the user to delete a broken link or ignore the broken link.
2. The script should display messages such as "OK" if the link is working or "search completed" when the search is done.
3. Add necessary comments in the script for readability.
回复 支持 反对

使用道具 举报

发表于 2006-3-3 14:27:14 | 显示全部楼层
Will paste my answer sheet later.
回复 支持 反对

使用道具 举报

发表于 2006-3-3 14:32:07 | 显示全部楼层
Why don't you post yours first?

We will write ours and don't worry about the plagiarism.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表