Chinaunix
标题:
awk处理大文本报错
[打印本页]
作者:
tzxys
时间:
2003-11-29 23:47
标题:
awk处理大文本报错
今天处理月报数据,用awk写的脚本在处理过程中报错了,导致从出错
行到最后面的行都没被awk脚本过滤出来
下面是出错信息:
awk:can't open file /usr/report/xys/JSAPCM22.TXT:Too many
open files (error 24 )
input record number 122420,file -
source line 26 of file /usr/report/bin/ACFRPT1.awk
被cat的这个文件的大小为13MB多,后来我用split -l20000 拆成3个文件后
就不报错了,但是这样我要对原来的程序做很大的改动,不知道有没有谁遇到过类似的情况,难道真的是awk处理大于13mb的文件就到了他的极限了吗????(那样awk就失去他的价值了)
此问题严重涉及到awk的应用范围,麻烦各位帮个忙!!
作者:
admirer
时间:
2003-11-30 08:09
标题:
awk处理大文本报错
直接在awk命令行引用文件/usr/report/xys/JSAPCM22.TXT而不用cat试试。
作者:
tzxys
时间:
2003-11-30 08:32
标题:
awk处理大文本报错
[quote]
原帖由 "admirer"]直接在awk命令行引用文件/usr/report/xys/JSAPCM22.TXT而不用cat试试。[/quote 发表:
不呀,我的那个大文件文件名不是JSAPCM22.TXT,JSAPCM22.TXT只是
那个大文件过滤出的一种,说明如下:
cat file
601ACVD000101 GGGG JKSAD
601ACVD000102 SDFJLS ASLD
.....
601JSAPCM2201 ASDFSF ALSDJF
601JSAPCM2202 OUI SDLJ
.....
cat $HOME/bin/fj.awk
BEGIN{}
{ file_name=sunstr($0,4,
printf ("%s",$0)>>sprintf("%s/%s.TXT",path,file_name)
}
END{}
cat file|awk -f $HOME/bin/fj.awk PATH=$HOME/REPORT
然后当file很大,就会报上面的错误了(我想可能并不是因为文件大,
而是因为file里面包含的不同文件名称太多,也就是说不同的file_name
太多,如果awk真的是不能解决这个问题,那么awk真的太次了)
作者:
nocomment
时间:
2003-12-01 09:39
标题:
awk处理大文本报错
将cat file|awk -f $HOME/bin/fj.awk PATH=$HOME/REPORT
改为cat file|
xargs
awk -f $HOME/bin/fj.awk PATH=$HOME/REPORT试试
作者:
slnhghm
时间:
2003-12-01 13:18
标题:
awk处理大文本报错
awk在很多方面有局限性,最好用gawk,
作者:
tzxys
时间:
2003-12-02 21:26
标题:
awk处理大文本报错
[quote]
原帖由 "nocomment"]awk -f $HOME/bin/fj.awk PATH=$HOME/REPORT试试[/quote 发表:
这句是不对的,cat file|xargs awk -f .......
您有没有试过,这么做根本不行,那怕文本file只有1行
用法错误!!!!!!!!
我按照邮政局的说法下了个gawk,问题就解决了,gawk的速度还
比awk的处理速度要快。
1977年诞生了awk,1985年诞生了gawk,gawk果然好用!
不过在使用中发现一点区别,先告诉大家,以免少走弯路,
在awk中if(variable==01)
....
如果在gawk中必须if (variable=="01"
既gawk中的比较运算都是基于字符串的,否则将全部返回假。
另外gawk安装完毕是在usr/local/bin下,要在$PATH中加入
强烈建议大家使用gawk,有一点疑问就是我在用户的.profile中加入了
PATH=/usr/local/bin:
在命令行是可以使用了,但是当在crontab中就不行了,
我现在只能这样cat file|/usr/local/bin/gawk.不知道如何才能在crontab中
执行的shell脚本中添加$PATH和让她运行是使用的ksh,而不是sh????????????
作者:
nocomment
时间:
2003-12-02 21:54
标题:
awk处理大文本报错
不知道楼上的那位使用xargs后出现什么错误?
请看俺机器上的实例
amy@box:~/temp$ more file1
aaa
bbb
amy@box:~/temp$ more file2
ccc
ddd
amy@box:~/temp$ more input
file1
file2
amy@box:~/temp$ more input.awk
#!/usr/bin/awk -f
{
print $0
}
amy@box:~/temp$ cat input | xargs awk -f input.awk
aaa
bbb
ccc
ddd
复制代码
作者:
tzxys
时间:
2003-12-02 22:05
标题:
awk处理大文本报错
楼上的请先看明白我提问的问题呀?!!
我的cat file
这个file里面已经是最原始的文本行了,既
more file
aaa
bbb
aaa 和bbb不是例外的文件名称
当cat file|xargs awk -f
他把aaa bbb会再cat一下的,假设aaa和bbb是文本,那么将aaa中的
行$0中的substr($0,4,
输出到>>substr($0,4,
如果这个不同的($0,4,
大于100的话,用awk就会出错!
作者:
nocomment
时间:
2003-12-03 09:16
标题:
awk处理大文本报错
呵呵,俺给楼主添乱啦
汗~~
作者:
tzxys
时间:
2003-12-03 21:04
标题:
awk处理大文本报错
原帖由 "nocomment" 发表:
呵呵,俺给楼主添乱啦
汗~~
讨论就是要这种氛围!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2