Chinaunix
标题:
请教下如何实现下面的处理
[打印本页]
作者:
awang0808
时间:
2011-07-29 15:11
标题:
请教下如何实现下面的处理
输入:
A1 , 1 , 1 , 1
2 , B2 , 2 , 2
3 , C2 , 3 , 3
D1 , 4 , 4 , 4
A2 , 5 , 5 , 5
6 , B2 , 6 , 6
7 , C2 , 7 , 7
A3 , 8 , 8 , 8
9 , B3 , 9 , 9
10 , C3 , 10 , 10
D3 , 11 , 11 , 11
输出:
A1 , B1 ,C1 ,D1
A2 , B2 ,C2 ,
A3 , B3 ,C3 ,D3
就是每四行里取四个参数,没有的就空出来。
多谢多谢!
作者:
xiaopan3322
时间:
2011-07-29 15:28
B1,C1在哪里?
作者:
awang0808
时间:
2011-07-29 15:28
写错了,应该是
A1 , 1 , 1 , 1
2 , B1 , 2 , 2
3 , C1 , 3 , 3
D1 , 4 , 4 , 4
A2 , 5 , 5 , 5
6 , B2 , 6 , 6
7 , C2 , 7 , 7
A3 , 8 , 8 , 8
9 , B3 , 9 , 9
10 , C3 , 10 , 10
D3 , 11 , 11 , 11
作者:
liion631818
时间:
2011-07-29 16:11
本帖最后由 liion631818 于 2011-07-29 16:19 编辑
awk -F"," '{
for(i=1;i<=NF;i++) {
gsub(" ", "", $i)
if (pos = match($i, "[A-Z]")) {
a[substr($i, pos + 1)] ? delims = "\t," : delims = ""
a[substr($i, pos + 1)] = a[substr($i, pos + 1)] delims $i
}
}
}
END{
for (i in a) print a[i]
}'
复制代码
作者:
awang0808
时间:
2011-07-29 16:26
运行了一下,结果如下:
A3 B3 C3 D3
A2 B2 C2
A1 B1 C1 D1
和我想要的倒过来了,但是没关系,非常感谢!
作者:
awang0808
时间:
2011-07-29 16:29
额,怎么变了,这次的是顺着的了,多谢多谢!
作者:
liion631818
时间:
2011-07-29 16:36
回复
6#
awang0808
awk的数组是没有顺序的。没办法保证。
作者:
rqzrqh
时间:
2011-07-29 16:54
明显你的意思不是每四行里取四个参数
作者:
ywlscpl
时间:
2011-07-29 16:54
ywlscpl@ubuntu:~$ cat file
A1 , 1 , 1 , 1
2 , D5 , 2 , 2
3 , C1 , 3 , 3
D1 , 4 , 4 , 4
A2 , 5 , 5 , 5
6 , B2 , 6 , 6
7 , C4 , 7 , 7
A3 , 8 , 8 , 8
9 , B3 , 9 , 9
10 , C3 , 10 , 10
D3 , 11 , 11 , 11
ywlscpl@ubuntu:~$ awk -v RS='[ ,\n]+' 'BEGIN{for (i=65;i<=90;i++) c[i]=sprintf("%c",i)}/^[A-Z]/{a[$0]=$0;sub(/^[A-Z]+/,"");m1=m1<$0?$0:m1}END{n=asort(a,b);sub(/[0-9]+$/,"",b[n]);for (i=65;i<=90;i++) if (c[i]==b[n]) m2=i;for (i=1;i<=m1;i++) {for (j=65;j<=m2;j++) {v=c[j]i;printf (j==65?"":"\t,")(v in a?v:"")}print ""}}' file
A1 , ,C1 ,D1
A2 ,B2 , ,
A3 ,B3 ,C3 ,D3
, ,C4 ,
, , ,D5
复制代码
作者:
yinyuemi
时间:
2011-07-30 01:02
本帖最后由 yinyuemi 于 2011-07-30 01:04 编辑
回复
1#
awang0808
echo 'A4 , 1 , 1 , 1
2 , B5 , 2 , 2
3 , C1 , 3 , 3
D1 , 4 , 4 , 4
A2 , 5 , 5 , 5
6 , B2 , 6 , 6
7 , C2 , 7 , 7
A3 , 8 , 8 , 8
9 , B3 , 9 , 9
10 , C3 , 10 , 10
D3 , 11 , 11 , 11' |\
awk '{gsub(/ +, [0-9]+/,"")
gsub(/[0-9 ]+, /,"")
t1=substr($0,1,1);t2=substr($0,2,1)
a[t1]=t1
x=x>t2?x:t2;
c[$0]=1
}
END{for(i=1;i<=x;i++){
for(j=1;j<asort(a);j++)
printf c[a[j] i]?a[j] i"\t, ":"\t, "
print c[a[j] i]?a[j] i:""}
}'
, , C1 , D1
A2 , B2 , C2 ,
A3 , B3 , C3 , D3
A4 , , ,
, B5 , ,
复制代码
作者:
xiaopan3322
时间:
2011-07-30 09:44
弓虽
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2