Chinaunix
标题:
行列转换 去重复 求助了
[打印本页]
作者:
x3
时间:
2012-02-10 11:26
标题:
行列转换 去重复 求助了
本帖最后由 x3 于 2012-02-10 13:11 编辑
NODE 0
U1 N1_01 2462478
U1 DAY01 2269231
.....
FIN DAY03 74180
FIN CU 47146
FIN UCV 40259
NODE 1
U1 N1_01 2462359
.......
FIN DAY03 74190
FIN APAN 54761
FIN UCV 40327
NODE 2
U1 N1_01 2462642
......
FIN DAY03 74197
FIN UCV 40240
NODE 3
U1 N1_01 2461330
.....
FIN DAY03 74152
FIN UCV 40154
NODE X
....
.....
以上在 各自 NODE范围内 无重复
但是 要求 按前两个字符列 在NODE列下面的数值输出如下结果
NODE 0 NODE 1 NODE 2 NODE 3 NODE XXX
U1 N1_01 2461330 2462359 2462642 2461330 ...
.....
FIN DAY03 74152 74190 74197 74152 ...
FIN UCV 40154 40327 40240 40154 ..
作者:
ywlscpl
时间:
2012-02-10 12:50
噎着了?
作者:
x3
时间:
2012-02-10 13:10
最后的格式要求部分 怎么在第一次没有贴上
现在补上了 大家给些帮助吧
作者:
ywlscpl
时间:
2012-02-10 13:30
回复
3#
x3
ywlscpl@ubuntu:~$ cat file
NODE 0
U1 N1_01 2462478
U1 DAY01 2269231
FIN DAY03 74180
FIN CU 47146
FIN UCV 40259
NODE 1
U1 N1_01 2462359
FIN DAY03 74190
FIN APAN 54761
FIN UCV 40327
NODE 2
U1 N1_01 2462642
FIN DAY03 74197
FIN UCV 40240
NODE 3
U1 N1_01 2461330
FIN DAY03 74152
FIN UCV 40154
NODE X
ywlscpl@ubuntu:~$ awk '/^NODE /{a[++n]=$0;v=$0}NF>2{v1=$1" "$2;b[v1];c[v1" "v]=(v1"\t"v in c?c[v1" "v]" "$3:$3)}END{printf "%10s"," ";for (i=1;i<=n;i++) printf "\t"a[i];print "";for (i in b) {printf "%10s",i;for (j=1;j<=n;j++) printf "\t"(i" "a[j] in c?c[i" "a[j]]:" ");print ""}}' file
NODE 0 NODE 1 NODE 2 NODE 3 NODE X
FIN UCV 40259 40327 40240 40154
U1 DAY01 2269231
FIN APAN 54761
FIN DAY03 74180 74190 74197 74152
FIN CU 47146
U1 N1_01 2462478 2462359 2462642 2461330
复制代码
作者:
jiejie455
时间:
2012-02-10 15:57
#!/usr/bin/awk -f
{
if($0~/^NODE/){
prefix=$1"\t"$2
a[$1"\t"$2]=$0
}else{
b[prefix"\t"$1"\t"$2]=$3
if($1!="" && $2!=""){
c[$1"\t"$2]
}
}
}
END{
printf "\t\t"
for(i=0;i<length(a);i++){
printf a["NODE\t"i]"\t"
}
printf "\n"
for(j in c){
printf j"\t"
for(i=0;i<length(a);i++){
printf b["NODE\t"i"\t"j]"\t"
}
print ""
}
}
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2