awing 发表于 2004-10-9 18:01:23

请问如何格式化数据

一共有4列,分别是邮政编码,地址,姓名,
一共有1000行,每行对应一个人。
数据如下:
200433,AAAAA,NAME1
200400,BBBBB,NAME2
......

由于寄信的时候一半写成如下格式
邮编
地址
姓名

所以我想把上面的数据格式变成如下:
200433
AAAAA
NAME1
200400
BBBBB
NAME2

...

也就是说每个人的数据变成三行,并且每个人的邮编,地址和姓名要连在一起。
(最好在每个人之间增加一个空白的行!)

请问有没有比较简单的方法达到这个目的?
(也就是说不要手工用回车来达到目的。)
谢谢

dannycat 发表于 2004-10-9 18:47:56

一共有4列,分别是邮政编码,地址,姓名,瞧这孩子,算术学的真好:mrgreen:

先把你的回车符替换成两个回车符,再把逗号替换成回车符。
随便用个支持替换的编辑器,或者直接 sed 都行嘛。

风戬 发表于 2004-10-9 21:50:07

gawk -F "," '{print "\n",$1,"\n",$2,"\n",$3}' filename
行么?

dannycat 发表于 2004-10-9 22:07:14

gawk -F "," '{print "\n",$1,"\n",$2,"\n",$3}' filename
行么?
Good!
不过这样会在首部多出一个空行。 当然对于楼主的文件是无所谓的,其他应用里要注意一下。

风戬 发表于 2004-10-9 22:24:31

谢谢指点,第一次用awk,还不太熟,改成
gawk -F "," '{print $1,"\n",$2,"\n",$3,"\n"}' filename
好么?不过要在结尾多一个空行啊,还有什么简单的方法么?

dannycat 发表于 2004-10-9 23:07:12

问题搞复杂了:) 我想楼主的目的已经达到了吧?
非要在一个语句里完成上下不留空行而中间插入空行的目的大概不太现实,也许哪位高人有绝招。

要提醒的是 awk 得到的数据之间默认是以一个空格分隔的,也就是说行首行尾都多了空格(第二次的语句里像200433这一个结果行的行首没有空格而行尾会有)。要去除空格,在语句里设好 OFS="" 。

风戬 发表于 2004-10-10 10:28:07

呵呵,我不会那么容易死心的,第一次做题就放弃可不好,
刚才想了半节课,又改了下,看看这回还有什么问题么?
awk -F"," '{OFS=""}{print "\n",$1,"\n",$2,"\n",$3}' filename | sed '1d'
页: [1]
查看完整版本: 请问如何格式化数据