[问题]关于awk在shell中的运用,达人看下

sh/bash/dash/ksh/zsh等Shell脚本
回复
zzsmile1114
帖子: 4
注册时间: 2006-04-14 9:48

[问题]关于awk在shell中的运用,达人看下

#1

帖子 zzsmile1114 » 2006-04-14 9:49

初学shell,遇到个问题,不知道怎么入手,请达人帮忙下一段,自己研究研究。
在a文件夹中,存在未知的几个已命名文件夹,假设现在有3个文件夹,名称分别为:cat,dog,duck 读取它们各自的名称。
在b文件夹中,存在未知的几个txt,假设现在有3个txt,分别为1.txt,2.txt,3.txt 里边的内容格式为一样。内容分别是1.txt中内容 Path: catNumber: 2
2.txt中内容 Path: dogNumber: 3
3.txt中内容 Path: duckNumber: 6
要求是首先从这个a文件目录下获得每个名称,然后对应的在b文件夹中查找number后的数字。
接着对应每个名称去指定的test.txt中查找,假定test.txt内容为:
cat: 3
dog: 1
可以发现少了一个duck: 6 而且test.txt中的cat后应该为2,而不是3 dog后应该为3,而不是1。那么我想做这么个操作,就是Print "NewNumber < OldNumber" ,Print "NewNumber > OldNuber", Print"NewTest"。第一个Pring意思是cat后的number,第2个是指dog,第3个print是指少的那个duck,这步操作的同时把test.txt内容修改为
cat: 2
dog: 3
duck: 6
其中用awk是肯定的吧,但是自己不知道怎么入手,望各位帮忙写写,小弟我研究研究,不胜感激。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2006-04-14 11:03

先问简单点吧。我看了头晕。把问题拆开问。
● 鸣学
zzsmile1114
帖子: 4
注册时间: 2006-04-14 9:48

#3

帖子 zzsmile1114 » 2006-04-14 13:00

恩。可能看起来长,我写的更异读点吧。很容易理解的,谢谢。
在a文件夹中,存在未知的几个已命名文件夹,假设现在有3个文件夹,名称分别为:cat,dog,duck 读取它们各自的名称。
在b文件夹中,对应着就有3个txt,分别为1.txt,2.txt,3.txt 里边的内容格式为一样。内容分别是
1.txt中内容 Path: cat
Number: 2
2.txt中内容 Path: dog
Number: 3
3.txt中内容 Path: duck
Number: 6
要求是首先从这个a文件目录下获得那3个文件夹的名称就是cat,dog,duck,然后对应的在b文件夹的3个txt中查找number后的数字。
上述可以划分为一个操作。
接着对应每个名称在指定的test.txt中查找,假定test.txt内容为:
cat: 3
dog: 1
可以发现少了一个duck: 6. 而且test.txt中的cat后应该为2,而不是3 .dog后应该为3,而不是1。那么我想做这么个操作,把test.txt内容修改为
cat: 2
dog: 3
duck: 6
上述的2个操作,可以用一个shell脚本写出来吧?
zzsmile1114
帖子: 4
注册时间: 2006-04-14 9:48

#4

帖子 zzsmile1114 » 2006-04-14 13:16

eexpress 写了:先问简单点吧。我看了头晕。把问题拆开问。
随时关注,初学shell,感觉这个很有意思。想必对服务器的管理也有帮助。朋友写下,我好好研究:) :)
zzsmile1114
帖子: 4
注册时间: 2006-04-14 9:48

#5

帖子 zzsmile1114 » 2006-04-14 13:43

对了,这些cat,dog的文件夹名,和对应的number值,都是可变的。好写吗?
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

#6

帖子 5451vs5451 » 2006-07-20 23:40

for name in $(ls a); do echo $name: $(grep $name b/* | egrep -o '[0-9]+') >> test.$$; done; mv test.$$ test.txt

没有测试过,仅供参考。
回复