可能是个很简单的问题

rockaka
可能是个很简单的问题

awk读取文件,分别输出到不用的文件,

shell文件ss
for file in 2008*
do
awk -f c std file
done

awk文件c
BEGIN {FS="([ |//t])" ;print FILENAME}
NR==FNR {a[$5]=$4}
NR>FNR {if(a[$2]!="") print  a[$2],$2,$4,$5>"yes";}
NR>FNR {if(a[$2]=="") print  $2,$4,$5>"not";}

现在需要希望输出的文件是yes+文件名和not+文件名。请问在awk文件中要怎样改???

rockaka
在线等!!!!!!!!!!!

ly5066113
awk 'NR==FNR{a[$5]=$4}NR>FNR{if($2 in a) print a[$2],$2,$4,$5 > "yes"FILENAME;else print $2,$4,$5 > "not"FILENAME}' std 2008*

rockaka
不行啊,这样会报错,!!!

rockaka
有人在没有???

无声无息
将文件名加在yes或者no后面不行?什么报错的?贴出来执行过程

cjaizss
[code]
BEGIN {FS="([ |//t])" ;print FILENAME}
NR==FNR {a[$5]=$4}
NR>FNR {if(a[$2]!="") print  a[$2],$2,$4,$5>"yes"FILENAME;}
NR>FNR {if(a[$2]=="") print  $2,$4,$5>"not"FILENAME;}
[/code]

rockaka
BEGIN {FS="([ |//t])" ;print FILENAME}
NR==FNR {a[$5]=$4}
NR>FNR {if(a[$2]!="") print  a[$2],$2,$4,$5>"yes"FILENAME;}
NR>FNR {if(a[$2]=="") print  $2,$4,$5>"no"FILENAME;}
我就是这样写的,错误信息如下
awk: Syntax error
at line 3 of file c
context is
        NR>FNR {if(a[$2]!="") print  >>>  a[$2],$2,$4,$5>"yes"FILENAME <<< ;}
awk: illegal statement
at line 3 of file c

rockaka
晕死了!郁闷啊!

rockaka
有人解答下吗?

rockaka
????????????????????????????

rockaka
郁闷了!

waker
用nawk或gawk

ruifox
注意:NR==FNR 时,FILENAME=std
NR>FNR时,FILENAME=file

如果要用第一个文件名,写法如下:
BEGIN {FS="([ |//t])" ;print FILENAME;yfile="yes"FILENAME;nfile="no"FILENAME;}
NR==FNR {a[$2]=$1;}
NR>FNR {        
               if(a[$2]!="") print  a[$2],$1>yfile
               else print  $2,$1>nfile
              }

如果要用第二个文件名,写法如下:

BEGIN {FS="([ |//t])" ;print FILENAME;}
NR==FNR {a[$2]=$1;}
NR>FNR {yfile="yes"FILENAME;nfile="no"FILENAME;
        if(a[$2]!="") print  a[$2],$1>yfile
        else print  $2,$1>nfile
        }
~