免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: liujuejun
打印 上一主题 下一主题

awk 分类文件帮忙,高手帮忙了 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-04-01 18:34 |只看该作者
原帖由 liujuejun 于 2008-4-1 17:40 发表
谢谢 nuclearxin 让你劳心了
数组里是不是不能含有多个$
a[$3$4$5]好象不行哦

呵呵 我的思路很容看的  
你自己调吧

论坛徽章:
0
22 [报告]
发表于 2008-04-01 18:35 |只看该作者

  1. awk '{
  2.   a[$3,$4,$5]++
  3.   file=sprintf("%d%d%d_%04d",$3,$4,$5,(a[$3,$4,$5]-1)/1000)
  4.   print $1" "$2 > file
  5. }' 数据文件
复制代码

论坛徽章:
0
23 [报告]
发表于 2008-04-01 18:55 |只看该作者
原帖由 springwind426 于 2008-4-1 18:35 发表

awk '{
  a[$3,$4,$5]++
  file=sprintf("%d%d%d_%04d",$3,$4,$5,(a[$3,$4,$5]-1)/1000)
  print $1" "$2 > file
}' 数据文件

你的更经典 数组原来要这么弄 ^_^a[$3,$4,$5]
你的文件符合我第二种命名fileXXXX_0001.txt,ileXXXX_0002.txt,

我的改写一下
就是这样
awk '{b[$3,$4,$5]++;aa=b[$3,$4,$5]-b[$3,$4,$5]%1000+1000;txt="tmp/file"substr($3,1,1)substr($4,1,1)substr($5,1,2)""aa".txt";print $1,$2>txt; print txt>"tmp/file.log"}'  text.txt
我的文件符合我第一种命名fileXXXX_1000.txt,fileXXXX_2000.txt

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
24 [报告]
发表于 2008-04-01 19:08 |只看该作者

  1. awk '{print $1,$2>"file"$3$4$5}' urfile
复制代码

论坛徽章:
0
25 [报告]
发表于 2008-04-01 20:06 |只看该作者
原帖由 cjaizss 于 2008-4-1 19:08 发表

awk '{print $1,$2>"file"$3$4$5}' urfile

cjaizss老大好象理解错了我的意思,你的代码在我sco unix 5.05 中报错

论坛徽章:
0
26 [报告]
发表于 2008-04-02 09:14 |只看该作者
awk '{
  a[$3,$4,$5]++
  file=sprintf("%d%d%d_%04d",$3,$4,$5,(a[$3,$4,$5]-1)/1000)
  print $1" "$2 > file
}' 数据文件

这里有个bug就是当a[$3,$4,$5]=1001时,(a[$3,$4,$5]-1)/1000=1了,那么文件名就重复了

论坛徽章:
0
27 [报告]
发表于 2008-04-02 10:37 |只看该作者
原帖由 寂寞烈火 于 2008-4-1 15:52 发表
awk '{print $1,$2 >"file"$3$4$5}' ur-file


我觉得还是应该在这个思路上修改修改,这个在linux上gnu的awk是可行的,先用这个简单的命令分离出来,然后在配合sed或awk再做一次每1000行分文件的操作,这样比较简单明了。

论坛徽章:
0
28 [报告]
发表于 2008-04-03 09:51 |只看该作者
awk '{print $1,$2>"file"$3$4$5"_"(int((FNR-1)/1000)+1) }' ur-file

论坛徽章:
0
29 [报告]
发表于 2008-04-09 09:35 |只看该作者
原帖由 wysilly 于 2008-4-3 09:51 发表
awk '{print $1,$2>"file"$3$4$5"_"(int((FNR-1)/1000)+1) }' ur-file

你这个错了吧,这样把同一类型的多余1000都放在fileXXXX_1里面了,所有文件结尾编号最大只有1了

觉得最好的还是springwind426稍微改一下
原帖由 springwind426 于 2008-4-1 18:35 发表

awk '{
  a[$3,$4,$5]++
  file=sprintf("%d%d%d_%04d",$3,$4,$5,(a[$3,$4,$5]-1)/1000+1)
  print $1" "$2 > file
}' 数据文件

论坛徽章:
0
30 [报告]
发表于 2008-04-11 09:27 |只看该作者
split -l1000 -a10 yourfile;
for i in `ls x*`; do cat $i | awk '{if(NR==1)file="file"$2$3$4; print $1,$2>file}';rm -rf $i   ; done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP