Chinaunix

标题: 数据转横,请教 [打印本页]

作者: gdutllf2006    时间: 2012-01-19 10:31
标题: 数据转横,请教
数据转横:
7500811|37|
7500851|36|
7500851|37|
7521174|29|
7521174|30|
7521174|31|

如何用脚本(awk,shell,sed,perl都行),将上述数据转换成:
域数固定:号码|对应的组ID1|对应的组ID2|对应的组ID3|对应的组ID4|对应的组ID5|
如果没有对应的组ID那赋默认值-1

7500811|37|-1|-1|-1|-1|
7500851|36|37|-1|-1|-1|
7521174|29|30|31|-1|-1|
作者: waker    时间: 2012-01-19 10:59
  1. awk -F\| '{a[$1]=a[$1]"|"$2}
  2. END{for(i in a)print i a[i]"|-1|-1|-1|-1"}' urfile|cut -d\| -f1-5
复制代码

作者: yinyuemi    时间: 2012-01-19 11:02
回复 1# gdutllf2006
  1. echo '7500811|37|
  2. 7500851|36|
  3. 7500851|37|
  4. 7521174|29|
  5. 7521174|30|
  6. 7521174|31|' |awk -F'|' '!a[$1]++{if(b++)print t ;t=$1"|-1|-1|-1|-1|-1|";}{t=gensub(/\|-1/,"|"$2,1,t)}END{print t}'

  7. 7500811|37|-1|-1|-1|-1|
  8. 7500851|36|37|-1|-1|-1|
  9. 7521174|29|30|31|-1|-1|
复制代码

作者: ywlscpl    时间: 2012-01-19 11:04
回复 1# gdutllf2006
  1. awk -F '|' -v OFS='|' '{a[$1"|"++b[$1]]=$2}END{for (i in b) {for (j=1;j<=5;j++) if (!(i"|"j in a)) a[i"|"j]=-1;print i,a[i"|"1],a[i"|"2],a[i"|"3],a[i"|"4],a[i"|"5]"|"}}' file
复制代码

作者: zooyo    时间: 2012-01-19 11:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: gdutllf2006    时间: 2012-01-19 11:18
多谢两位,已理解waker的代码。
作者: lastfile    时间: 2012-01-19 12:16
真多shell高人
作者: seesea2517    时间: 2012-01-20 14:00
我连题目都看不懂……




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