大家好,我真的陷入了这个该死的考试前练习中。
练习:编写一个 scrypt 来处理文件名(作为第一个参数)并计算该文件中这些数字和字母的数量。 Scrypt 还应该对所有这些数字进行求和。
1 2 3 4 5
9 2 3 1 2 a l a i o l a
9 2 ala ma kota 102
它应该是什么样子:
File ....... have 15 numbers and 16 letters.
Sum of all of those numbers is 145.
我的想法是我应该如何处理这个练习(一步一步)
- 捕获文件名(作为参数)
- 将整个数据解析为一行(以便于排序)
- 对整个数据进行数字排序(得到这样的结果 1 2 3 4 5 6 (...)102 aaaaaaaikm (...)
- 将第一个数字设置为参数($1-$13)以方便求和和计数+将字母设置为参数以方便计数
- 将所有内容弹出到控制台
享受我的生活并玩守望先锋(开玩笑,回到 2 学习 Linux {考试前的可爱东西})
我被困住了。
步骤2.解析完我得到的这些数据后(几乎尝试了我能找到的所有内容):
1 2 3 4 5 9 2 3 1 2 a l a i o l a 9 2 ala ma kota 102
确实不知道如何将这 3 行合并为 1 行,每当我尝试 2 排序时,我都会回到开头。
echo `cat kolos3 | xargs | sort -n `
如果你们中有人能够帮助我完成这项练习,那就太好了。
答案1
grep -o
无论您是否将输入连接到同一行,都会在这里完成大部分工作。
-o, --仅匹配
仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。
计算字母数:
grep -o "[[:alpha:]]" "$file" | wc -l
来计算数字:
grep -o "[[:digit:]]" "$file" | wc -l
但如果你想要数字:
grep -o "[[:digit:]]\+" "$file" | wc -l
要对数字进行求和,您可以使用以下任何解决方案如何创建一个对任意数量的命令行参数求和的 bash 脚本?
我会把这个问题传递给bc
:
(grep -o "[[:digit:]]\+" "$file" | tr '\n' + ;echo 0)|bc