Chinaunix

标题: 请求帮助数据转换 [打印本页]

作者: kensoul    时间: 2006-01-17 21:58
标题: 请求帮助数据转换
想将以下个人数据补全至2005年
源数据如下:
序号,单位名称,姓名,公民顺序号,单位顺序号,开始年月,终止年月,缴费基数
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200201,200212,1022
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200301,,0
1,道孚县八美镇,徐德珍,513326195701112028,108000208718,108000101814,200401,200412,1352
需要的结果数据数据:
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200201,200212,1022
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200301,,0
,,,,,,200401,,
,,,,,,200501,,
1,道孚县八美镇,徐德珍,513326195701112028,108000208718,108000101814,200401,200412,1352
,,,,,,200501,,
以第6列的最后一个数为基础,现在要把这些人的数据补全到2005年
注:每个人的第6列(即:“开始日期”列)的最大值是不固定的,可能是200301,可能是200201,也可能是199801……
作者: 技安    时间: 2006-01-17 22:34
没看懂呀、你的数据好像没有变化呀,怎么补呀~~!!!、
作者: kensoul    时间: 2006-01-17 22:48
标题: 回复 2楼 技安 的帖子
原数据中第一个人只有2行,第2个人只有一行,以第6列为标准,如果一个人第6列的最大一个年月小于200501,
那么就在下面放入新行,新行的值:除第6列的值递增加100,直到增加到200501,新行其它数据列的值都全部为空。
作者: 技安    时间: 2006-01-17 22:54
晕、那不是第七列吗?
作者: kensoul    时间: 2006-01-17 23:01
标题: 回复 4楼 技安 的帖子
哦!是第七列。不好意思。重写一下:
原数据如下:
序号,单位名称,姓名,公民顺序号,单位顺序号,个人顺序号,开始年月,终止年月,缴费基数
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200201,200212,1022
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200301,,0
1,道孚县八美镇,徐德珍,513326195701112028,108000208718,108000101814,200401,200412,1352
需要的结果数据数据:
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200201,200212,1022
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200301,,0
,,,,,,200401,,
,,,,,,200501,,
1,道孚县八美镇,徐德珍,513326195701112028,108000208718,108000101814,200401,200412,1352
,,,,,,200501,,
以第7列的最后一个数为基础,现在要把这些人的数据补全到2005年
注:每个人的第7列(即:“开始日期”列)的最大值是不固定的,可能是200301,可能是200201,也可能是199801……
原数据中第一个人只有2行,第2个人只有一行,以第7列为标准,如果一个人第7列的最大一个年月小于200501,
那么就在下面放入相应新行,新行的值:除第7列的值递增加100,直到增加到200501,新行其它数据列的值都全部为空。
作者: 技安    时间: 2006-01-17 23:13
sort -t, -k1 -k2 -k3 +6n filename |awk ' { b[$1$2$3]=$1","$2","$3"," ;a[$1$2$3]=$7 } END  { for ( i in a ) {  if ( a[i] < 200512 ) { for ( tmp=a[i]; tmp < 200512; tmp+=100) { print b[i]",  , ,"tmp", , "} } } } '

-------------

[aluns]~/atmp>cat aa
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200201,200212,1022
1,道孚县八美工委,白玛优英,513326197307022023,108000208027,108000101721,200301,,0
1,道孚县八美镇,徐德珍,513326195701112028,108000208718,108000101814,200401,200412,1352
[aluns]~/atmp>sort -t, -k1 -k2 -k3 +6n aa | awk -F, ' { b[$1$2$3]=$1","$2","$3"," ;a[$1$2$3]=$7 } END  { for ( i in a ) {  if ( a[i] < 200512 ) { for ( tmp=a[i]; tmp < 200512; tmp+=100) { print b[i]",  , ,"tmp", , "} } } } '
1,道孚县八美镇,徐德珍,,  , ,200401, ,
1,道孚县八美镇,徐德珍,,  , ,200501, ,
1,道孚县八美工委,白玛优英,,  , ,200301, ,
1,道孚县八美工委,白玛优英,,  , ,200401, ,
1,道孚县八美工委,白玛优英,,  , ,200501, ,
作者: 技安    时间: 2006-01-17 23:14
晕,把原来的丢了,我再想想。
作者: kensoul    时间: 2006-01-17 23:34
标题: 回复 6楼 技安 的帖子
真是谢谢你!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2