Assignment 4

AI悦创原创Python 一对一教学SCU CSSanta Clara University圣克拉拉大学Python 一对一教学SCU CSSanta Clara University圣克拉拉大学大约 6 分钟...约 1836 字

Exercise 1 (1 point)

Position yourself in `/home/OMIS107/Lecture7`. Print the lines of students.txt relative to those students in MGMT that completed 2, 3, or 4 courses.

``````awk -F"," '{if (\$3=="MGMT" && \$4>=2 && \$4<=4) print \$0}' students.txt
awk -F"," '{if (\$3=="MGMT" && (\$4==2 || \$4==3 || \$4==4)) print \$0}' students.txt
awk -F"," '{if (\$3=="MGMT" && \$4~/^[234]\$/) print \$0}' students.txt
``````

1. `awk -F"," '{if (\$3=="MGMT" && \$4>=2 && \$4<=4) print \$0}' students.txt`
2. `awk -F"," '{if (\$3=="MGMT" && (\$4==2 || \$4==3 || \$4==4)) print \$0}' students.txt`
3. `awk -F"," '{if (\$3=="MGMT" && \$4~/^[234]\$/) print \$0}' students.txt`

`'{if (\$3=="MGMT" && \$4>=2 && \$4<=4) print \$0}'` 是 awk 的脚本部分，它告诉awk要执行的动作。这部分的含义是：如果第三个字段（\$3）等于 "MGMT" 且第四个字段（\$4）的值在2到4之间（包括2和4），那么就打印（print）整行（\$0）。

• 第一条命令使用 `>=``<=` 运算符进行数值比较。
• 第二条命令则是列举出所有满足条件的可能值，用 `||`（或）运算符连接。
• 第三条命令使用正则表达式（`\$4~/^[234]\$/`）来匹配符合条件的字段值。这里，`/^[234]\$/` 是一个正则表达式，表示只含有单个字符且该字符为2、3、4的字符串。

Exercise 2 (1 point)

Position yourself in `/home/OMIS107/Lecture7`. Print the lines of students.txt relative to those students whose first name and last name are both composed of at least 8 letters.

``````awk -F"," '{if (\$2 ~ /[A-Za-z]{8,} [A-Za-z]{8,}/) print \$0}' students.txt
``````

Exercise 3 (1 point)

Position yourself in `/home/OMIS107/Lecture7`. We want to find the average GPA of the best students in students.txt. Write a command that computes the average GPA computed only among those students whose GPA is greater than 3. Your code must return only a number; do not print anything else.

``````awk -F"," 'BEGIN{n=0;sum=0} {if (NR>1 && \$5>3) {n+=1;sum+=\$5 } } END{print sum/n}' students.txt
awk -F"," 'BEGIN{n=0;sum=0} {if (NR>1 && \$5>3) n+=1;sum+=\$5  } END{print sum/n}' students.txt (WRONG, because sum is modified regardless of the student’s GPA)
awk -F"," 'BEGIN{n=0;sum=0} {if ( \$5>3) {n+=1;sum+=\$5 } } END{print sum/n}' students.txt (WRONG, because it counts the header)
``````

`awk` 语言中，`~` 是一个运算符，它用于进行正则表达式匹配。如果某个字符串（在这个例子中是 `\$2`，即第二个字段的内容）匹配到了某个正则表达式（在这个例子中是 `/[A-Za-z]{8,} [A-Za-z]{8,}/`），那么 `~` 运算符就会返回 `true`

• `awk '{`：这一行启动了一个 `awk` 程序，`awk` 是一种用于处理文本的语言，非常适合处理表格和数据库等结构化的文本数据。

• `for (i = 1; i <= NF; i++)`：这一行开始一个循环，从第一个字段开始，一直到最后一个字段（在 `awk` 中，字段的数量存储在 `NF` 变量中）。假设输入是一个由空格分隔的文本文件，那么每个字段就对应于一个单词。

• `words[\$i]++`：这行代码将字段（也就是单词）作为 `words` 数组的键，并将其值增加1。如果这个单词之前没有出现过，那么 `awk` 将会创建一个新的数组元素，初始值为0，然后增加1。如果这个单词之前已经出现过，那么 `awk` 就会找到相应的数组元素，然后增加1。

• `}`：这一行结束了主体部分，主体部分的代码将会对输入文件的每一行执行一次。

• `END {`：这一行开始了一个特殊的代码块，只在 `awk` 处理完输入文件的所有行之后执行一次。

• `for (w in words)`：这一行开始一个循环，遍历 `words` 数组的所有元素。`awk` 的数组是关联数组，这意味着元素的键可以是任何字符串，而不仅仅是数字。在这个例子中，键是单词，值是单词出现的次数。

• `print w, words[w]`：这一行打印每个单词以及其出现的次数。

• `}' filename`：这一行结束了 `awk` 程序，并指定了输入文件的名称。

AI悦创·编程一对一

AI悦创·推出辅导班啦，包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Web、Linux」，全部都是一对一教学：一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然，还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线，随时响应！微信：Jiabcdefh

C++ 信息奥赛题解，长期更新！长期招收一对一中小学信息奥赛集训，莆田、厦门地区有机会线下上门，其他地区线上。微信：Jiabcdefh

• 0
• 0
• 0
• 0
• 0
• 0

• 按正序
• 按倒序
• 按热度