1

我正在尝试为匹配某些文本字段并以某种格式打印它们的分配制作一个 bash 脚本。我正在尝试获取课程编号、标题和学时数(从十进制转换为整数)并将其输出到名为course_list.

样本输入:

CSC 1010 - COMPUTERS & APPLICATIONS
Computers and Applications. Prerequisite: high school Algebra II. History of computers, hardware components, operating systems, application software, data communication. 
3.000 Credit hours

这是我所拥有的:

#!/bin/bash
awk '/CSC/ {print $1$2","$4,$5,$6,$7,$8,$9} /[0-9].(000)/ {print substr(","$1,1,2)}' courses.txt | cat >> course_list

这是我得到的输出:

CSC1010,COMPUTERS & APPLICATIONS   
,3

这是我想要的输出:

CSC1010,COMPUTERS & APPLICATIONS,3

我在想我已经很接近了,但我无法弄清楚如何在没有\n.

4

4 回答 4

1
$ cat file
CSC 1010 - COMPUTERS & APPLICATIONS
Computers and Applications. Prerequisite: high school Algebra II. History of computers, hardware components, operating systems, application software, data communication.
3.000 Credit hours

$ awk '/CSC/{split($0,a,/ - /); gsub(/ /,"",a[1])} /[0-9].000/{printf "%s,%s,%d\n",a[1],a[2],$1}' file
CSC1010,COMPUTERS & APPLICATIONS,3
于 2013-03-09T10:39:39.080 回答
0

使用 sed:

sed -n 's/CSC[^-]*-[ ]*\([^\.]*\).*\([0-9][0-9]*\)\.000[ ]*Credit.*/\1,\2/p' input
于 2013-03-08T03:07:57.567 回答
0

@Powdercake,是的,很接近。只需更改{print substr(","$1,1,2)}{print $1+0}强制$1进入(默认)数字格式(并省略@John Zwinck 提到的管道和猫的东西)

于 2013-03-08T08:41:47.647 回答
0
awk '{print $1$2","$4,$5,$6","$(NF-2)}' RS= course_list

解释:

NF是一个存储字段数量的内部变量。$NF保存最后一个字段的值。由于 OP 想要捕获当前NF-2位置的课程时间,因此我们将其打印出来。

于 2013-03-08T06:07:28.850 回答