[问题]高手 看看 如何解决这样的文本处理

sh/bash/dash/ksh/zsh等Shell脚本
回复
coldweb
帖子: 45
注册时间: 2008-03-22 1:19
联系:

[问题]高手 看看 如何解决这样的文本处理

#1

帖子 coldweb » 2008-06-04 14:29

文件名test
内容:
117 21.88 1
119 21.39 1
120 20.90 1
121 22.54 1
124 22.21 1
125 21.72 1
127 22.54 1
129 22.05 1
131 22.86 1
132 23.35 1
处理结果如下格式:
117 21.88 1119 21.39 1120 20.90 1121 22.54 1124 22.21 1125 21.72 1
127 22.54 1129 22.05 1131 22.86 1132 23.35 1 @@ [email protected]@0 @@ [email protected]
即将原文件的每行都连起来,合成一行显示六个,然后不足的用 @@[email protected] @0补上。其中@表示空格,其具体格式如下
(说明:例117 21.88 1即为117和21.88和1的组合,其格式为%3d%5.2f%2d)
头像
roylez
帖子: 1928
注册时间: 2005-10-04 10:59
来自: 上海

#2

帖子 roylez » 2008-06-04 16:18

其实完全可以用vim解决。我现在在windows底下,命令没测试过。

"J"是把两行连接起来,"5J"合并6行。"."是重复上次编辑。所以你大概可以用这样的组合:5Jj.j.j.
剩下就是补个没全的东西了。

如果J合并之后多了个空格,你就需要写macro了。
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

#3

帖子 iblicf » 2008-06-04 16:20

头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

#4

帖子 Strange » 2008-06-04 17:09

感觉lz到这里来是来完成工作的
ニンニク入れますか?
x60 with gentoo
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

#5

帖子 millenniumdark » 2008-06-04 17:38

Strange 写了:感觉lz到这里来是来完成工作的
同感。

樓主既然經常面對字符串處理的東東,還是學學grep|sed|awk|perl|python比較好。
头像
fatcat
帖子: 10
注册时间: 2008-06-11 14:13

#6

帖子 fatcat » 2008-06-14 3:11

创建文件proc.awk

代码: 全选

BEGIN{
	i=0;
}

{
	printf("%3d%6.2f%2d",$1,$2,$3);
	i=i+1;
	if(i>=6){
		printf("\n");
		i=0;
	}
}

END{
	for(;i<6;i++){
		printf("%3d%6.2f%2d",0,0,0);
	}
	printf("\n");
}
执行命令:

代码: 全选

awk -f proc.awk source
其中source是你要处理的文件
星星电灯
帖子: 1
注册时间: 2008-07-05 18:03

#7

帖子 星星电灯 » 2008-07-05 18:05

cat cc1.txt | awk 'BEGIN {ORS="\t"} {print $0;if(NR%6==0) printf("\n")} END {total=NR; while(total%6!=0) {printf(" 0 0.00 0");total++};printf("\n")}'
回复