The missing semester 4习题(待更新,部分问题未解决)

数据整理


1.学习一下这篇简短的交互式正则表达式教程.

按照上述链接学习即可~非常滴简单,非常滴好学~

2.统计words文件 (/usr/share/dict/words) 中包含至少三个a 且不以’s 结尾的单词个数。这些单词中,出现频率前三的末尾两个字母是什么? sed的 y命令,或者 tr 程序也许可以帮你解决大小写的问题。共存在多少种词尾两字母组合?还有一个很有挑战性的问题:哪个组合从未出现过?

2022.10.18更新
统计个数cat /usr/share/dict/words | tr "[:upper:]" "[:lower:]" | grep -E ".*(.*a){3}.*$" | grep -v "'s$" | wc -l
查找出现频率前三的末尾两字母 将wc -l换为sed -E "s/.*([a-z]{2})$/\1/" | sort | uniq -c | sort -g | tail -3
此处-E表示替换,s后面为被替换内容,用/隔开替换内容,\1表示使用用第一个()中的内容。
词尾两字母组合个数:将wc -l换为sed -E "s/.*([a-z]{2})$/\1/" | sort | uniq | wc -l
哪个组合未出现过:
先写一个get.sh获取所有的可能

for i in {a..z};
do
      for j in {a..z};
       do
               echo "$i$j"
       done
done

然后将get.sh输出到t1.txt,使用cat /usr/share/dict/words | tr "[:upper:]" "[:lower:]" | grep -E ".*(.*a){3}.*$" | grep -v "'s$" | sed -E "s/.*([a-z]{2})$/\1/" | sort | uniq > t2.txt 将出现的组合输出到t2.txt,最后使用sort t1.txt t2.txt | uniq -u得到答案

3.进行原地替换听上去很有诱惑力,例如: sed s/REGEX/SUBSTITUTION/ input.txt > input.txt。但是这并不是一个明智的做法,为什么呢?还是说只有 sed是这样的? 查看 man sed 来完成这个问题

在manual中还没找到问题,但是在自己尝试过程中,发现原来的内容被清理了…,所以这是一种可能?
2022.10.18更新:
昨天脑子晕乎了没转过弯来
其实问题出现的原因比较简单 > 这个重定向会将原始的文件覆盖,那么显而易见的问题就是会将input.txt的内容清空掉,那么sed的替换就毫无意义了。
给一个官方答案

sed s/REGEX/SUBSTITUTION/ input.txt > input.txt 表达式中后一个 input.txt会首先被清空,而且是发生在前的。所以前面一个input.txt在还没有被 sed 处理时已经为空了。在使用正则处理文件前最好是首先备份文件。

4.找出您最近十次开机的开机时间平均数、中位数和最长时间。在Linux上需要用到 journalctl ,而在 macOS 上使用 log show。找到每次起到开始和结束时的时间戳。在Linux上类似这样操作:
Logs begin at ...

systemd[577]: Startup finished in ...
在 macOS 上, 查找:
=== system boot:

Previous shutdown cause: 5

待更新

5.查看之前三次重启启动信息中不同的部分(参见 journalctl的-b 选项)。将这一任务分为几个步骤,首先获取之前三次启动的启动日志,也许获取启动日志的命令就有合适的选项可以帮助您提取前三次启动的日志,亦或者您可以使用sed ‘0,/STRING/d’ 来删除STRING匹配到的字符串前面的全部内容。然后,过滤掉每次都不相同的部分,例如时间戳。下一步,重复记录输入行并对其计数(可以使用uniq )。最后,删除所有出现过3次的内容(因为这些内容是三次启动日志中的重复部分)。

待更新

6.在网上找一个类似这个或者这个的数据集。或者从这里找一些。使用curl获取数据集并提取其中两列数据,如果您想要获取的是HTML数据,那么pup可能会更有帮助。对于JSON类型的数据,可以试试jq。请使用一条指令来找出其中一列的最大值和最小值,用另外一条指令计算两列之间差的总和。

待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值