- 论坛徽章:
- 0
|
本帖最后由 dickgz1z 于 2010-07-01 17:46 编辑
- awk -F"," '{
- print $3;
- while(getline d <"test"){
- split(d,k,",");
- print k[1]">>>>>"k[2];
- if(match($3,k[1]))count[k[2]]++;
- }
- }END{
- for(i in count)print i"\t"count[i]
- }' test2
复制代码 test:
bb.*kk.*ll,p
BB.*nn.*mm,l
cc.*mm.*ll,c
CC.*nn.*mm,t
test2:
aaaa,bbbb,aaaabbbbbkkkkkkllllll
bbbb,nnnn,aaaaBBBBBnnnnnnmmmmmm
cccc,mmmm,aaaaccccckkmmkkllllll
vvvv,xxxx,aaaaCCCCCnnnnnnmmmmmm
aaaa,bbbb,aaaabbbbbkkkkkkllllll
输出:
aaaabbbbbkkkkkkllllll
bb.*kk.*ll>>>>>p
BB.*nn.*mm>>>>>l
cc.*mm.*ll>>>>>c
CC.*nn.*mm>>>>>t
aaaaBBBBBnnnnnnmmmmmm
aaaaccccckkkkkkllllll
aaaaCCCCCnnnnnnmmmmmm
p 1
我想在awk扫描test2的第三个域$3的时候,从test中去匹配其第一个域,匹配到的话就获取其第二个域的值,以此作为count数组的索引,然后将相应的count[k[2]]++,计算匹配到的test 2的次数。想象中的输出应该是:
l 1
c 1
p 2
t 1
但是从打印信息可以看到,在扫描test2第一行时,进入while循环,getline,读一次已将指针直到文件末尾,到扫描第二行时,getline返回的值已为0,无法再进入while循环读取test文件。
怎样才能在扫描test2每一行的同时扫描test?
答案1:- awk -F',' '
- NR==FNR{
- a[$1]=$2;next
- }
- NR>FNR{
- for(cnt in a)
- if($3~cnt){
- count[a[cnt]]++;break;
- }
- }END{
- for(cnt in count)print cnt"\t"count[cnt]
- }' test test2
复制代码 |
|