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
awk -F\| '{a[$1]=a[$1]"|"$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
echo '7500811|37|
7500851|36|
7500851|37|
7521174|29|
7521174|30|
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}'
7500811|37|-1|-1|-1|-1|
7500851|36|37|-1|-1|-1|
7521174|29|30|31|-1|-1|
复制代码
作者:
ywlscpl
时间:
2012-01-19 11:04
回复
1#
gdutllf2006
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