免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 11162 | 回复: 30
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 15:19 |只看该作者 |倒序浏览
我重新说一下,下面的文件按第三第四第五域分开只是多要求增加 每1000行分开
1001001        name1        1        3        60
1001002        name2        1        3        60
1001003        name3        1        3        60
1001004        name4        1        4        62
1002001        name5        2        3        62
1002002        name6        2        3        64
1002003        name7        2        3        64
1002004        name8        2        4        66
…..        …..        …        …        ..

比如 分成
file1360
1001001        name1
1001002        name2
1001003        name3

file1462
1001004        name4

file2362
1002001        name5

file2364
1002002        name6
1002003        name7

file2466
1002004        name8

我的要求和前面的一个兄弟的按省分类的帖子相似,只是多要求增加 每1000行分开
因为记录有几十万条
我用几个awk可以实现,能不能一条实现
######################################
问题已经解决了
原帖由 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
}' 数据文件


我的方法
  1. awk '{b[$3,$4,$5]++
  2. file=sprintf("tmp/file%d%d%d_%04d",$3,$4,$5,b[$3,$4,$5]-b[$3,$4,$5]%1000+1000)
  3. a[file]=file
  4. print $1,$2>file}
  5. END{for( i in a)
  6. print a[i]>"tmp/file.log"}'  text.txt
复制代码

我自己弄成功了,而且打印了一个文件日志

[ 本帖最后由 liujuejun 于 2008-4-9 10:02 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-01 15:26 |只看该作者
没读懂题的路过~

论坛徽章:
0
3 [报告]
发表于 2008-04-01 15:27 |只看该作者

回复 #1 liujuejun 的帖子

我重新说一下,下面的文件按第三第四第五域分开
1001001        name1        1        3        60
1001002        name2        1        3        60
1001003        name3        1        3        60
1001004        name4        1        4        62
1002001        name5        2        3        62
1002002        name6        2        3        64
1002003        name7        2        3        64
1002004        name8        2        4        66
…..        …..        …        …        ..

比如 分成
file1360
1001001        name1
1001002        name2
1001003        name3

file1462
1001004        name4

file2362
1002001        name5

file2364
1002002        name6
1002003        name7

file2466
1002004        name8

我的要求和前面的一个兄弟的按省分类的帖子相似,只是多要求增加 每1000行分开
因为记录有几十万条
拜托了,我用几个awk可以实现,能不能一条实现

[ 本帖最后由 liujuejun 于 2008-4-1 15:37 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-04-01 15:41 |只看该作者
分开之后多出来的 怎么命名?

论坛徽章:
0
5 [报告]
发表于 2008-04-01 15:43 |只看该作者
命名就按第3第4第5个字段来命名
比如
1001001        name1        1        3        60
就是file13601000.txt
file13602000.txt
...........
也可以
file1360_0001.txt
file1360_0002.txt
.......

[ 本帖最后由 liujuejun 于 2008-4-1 15:46 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-04-01 15:48 |只看该作者
awk 'a[$3--$4--$5]++;if(a[$3--$4--$5]>1000){b++;a[$3--$4--$5]=0};{print $1,$2 >"file"$3"-"$4"-"$5"-"b}
每1000行 文件名字后面-递增标识
$3 $4 $5 联合起来可能混 所以中间 用了个-
没测试

[ 本帖最后由 nuclearxin 于 2008-4-1 15:50 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2008-04-01 15:52 |只看该作者
awk '{print $1,$2 >"file"$3$4$5}' ur-file

论坛徽章:
0
8 [报告]
发表于 2008-04-01 15:53 |只看该作者
原帖由 nuclearxin 于 2008-4-1 15:48 发表
awk 'a[$3--$4--$5]++;if(a[$3--$4--$5]>1000){b++;a[$3--$4--$5]=0};{print $1,$2 >"file"$3"-"$4"-"$5"-"b}
每1000行 文件名字后面-递增标识
$3 $4 $5 联合起来可能混 所以中间 用了个-
没测试

我先测试下

论坛徽章:
0
9 [报告]
发表于 2008-04-01 15:55 |只看该作者
cat file |awk '{print $1" "$2" "$3$4$5}' |while read col_1 col_2 col_3
do
echo "$col_1\t$col_2" >> file$col_3
done

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



果然是高手的简洁哈,惭愧:(
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP