LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 835|回复: 11

awk 如何加入一个新域,合并表头呢?!

[复制链接]
发表于 2003-11-25 09:29:11 | 显示全部楼层 |阅读模式
例:
$cat file0301
--名字-----班级-----成绩
--jone------3------78
--mary------2------89
--kely------3------84
$cat file0305
--名字-----班级-----成绩
--bbee------1------34
--erer------2------76
--cvcv------4------90
$cat file0702
--名字-----班级-----成绩
--jjyy------5------87
--ppmm------1------69
--rnlm------5------85

想要的结果是
$awk.sh
--学校代号--名字-----班级-----成绩
---0301---jone------3------78
--------mary------2------89
--------kely------3------84
---0305---bbee------1------34
--------erer------2------76
--------cvcv------4------90
---0702---jjyy------5------87
--------ppmm------1------69
--------rnlm------5------85


--代表空格,以便大家分出是域分隔

请执教
发表于 2003-11-25 11:11:59 | 显示全部楼层
学校代号在哪里?
 楼主| 发表于 2003-11-25 13:38:58 | 显示全部楼层

回版主

成绩单file1的学校代号就是0301
      file2的学校代号就是0305
      file3的学校代号就是0702
发表于 2003-11-25 15:08:14 | 显示全部楼层
awk :ask
是否需要一个文件来存放这些"学校代号",另外,file1...file3的文件的记录也不是固定的吧~~...thinking...
 楼主| 发表于 2003-11-25 15:22:52 | 显示全部楼层

可以这样

把file1的文件名命名为file0301
file2的为file0305
file3的为file0702

我把帖子改一下
发表于 2003-11-25 23:15:51 | 显示全部楼层
既然楼主提到AWK和域,为何要求的结果并不是增加了一个新域,除了每个班级的首行增加了一个域,其余行没有变化。
:ask
 楼主| 发表于 2003-11-26 09:58:23 | 显示全部楼层

回楼上

楼上的仔细看清楚我的结果哦,可是在$1加了个新的域哦,

其实加入一个字符域可以
$awk '{printf("555 %s\n",$0)}' file0301
555--名字-----班级-----成绩
555--jone------3------78
555--mary------2------89
555--kely------3------84

但如果是变量域就不知道了
发表于 2003-11-26 12:14:58 | 显示全部楼层

回复: awk 如何加入一个新域,合并表头呢?!

最初由 battosai 发表
想要的结果是
$awk.sh
--学校代号--名字-----班级-----成绩
---0301---jone------3------78
--------mary------2------89
--------kely------3------84
---0305---bbee------1------34
--------erer------2------76
--------cvcv------4------90
---0702---jjyy------5------87
--------ppmm------1------69
--------rnlm------5------85


--代表空格,以便大家分出是域分隔

请执教

请问$1是否是下列各行?

学校代号
0301
mary
kely
0305
erer
cvcv
0702
ppmm
rnlm

我对AWK了解不多,不知是否正确,总觉得楼主希望的结果不太适合使用AWK来完成。
发表于 2003-11-27 00:27:50 | 显示全部楼层
不知道这样是否可以达到楼主的要求
  1. [/home/javalee/myshell]cat he
  2. #!/bin/ksh
  3. title="学校代码 名字 班级 成绩"
  4. echo $title
  5. for i in file*
  6. do
  7.         sed -n '2,$p' $i|while read j
  8.         do
  9.                 echo -n $(ls $i|tr -d file)
  10.                 printf "%5s$j\n"
  11.         done
  12. done
  13. 结果:
  14. [/home/javalee/myshell]ksh he
  15. 学校代码 名字 班级 成绩
  16. 0103     jone 3    78
  17. 0103     mary 2    89
  18. 0103     kely 3    84
  19. 0305     bbee 1    34
  20. 0305     erer 2    76
  21. 0305     cvcv 4    90
  22. 0702     jjyy 5    87
  23. 0702     ppmm 1    69
  24. 0702     rnlm 5    85
复制代码
 楼主| 发表于 2003-11-27 09:22:30 | 显示全部楼层

楼上的可以啊,哈哈

$vi myshell
  1. #!/bin/bash
  2. awk '{printf("学校代号 %s\n",$0)}' file0301 |sed -n '1p' >filehead
  3. for i in 0301 0305 0702
  4. do
  5.   awk '{printf("学校代号 %s\n",$0)}' file$i |sed -n '2,$p' |sed 's/学校代号/'${i}'/' >stmp
  6. mv stmp $i\file
  7. cat $i\file  >>filehead
  8. done
复制代码


$cat filehead
学校代号 名字     班级     成绩
0301 jtne      6        98
0301 uary      2        83
0301 pely      5        24
0305 jone      3        88
0305 maty      3        39
0305 kyly      8        94
0702 eore      7      42
0702 gary      9      81
0702 mely      1      79
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表