我正在尝试将文件中的特定行复制到特定的文件夹名称中。并且该文件夹的名称必须与该行的名称相同。
我有 3 个文件夹:
- /home/my_username/bin :其中包含一个文件,这是我的脚本文件:切换菜单
- /home/student :其中包含我的 2 个学生文件:瑞克和乔什 在这两个文件中,都有所有受试者姓名,后面是他们收到的相应分数。
- /home/result :其中包含我的 2 个科目课程文件:数学和历史 在这两个文件中,都有学生姓名,后面是他们针对该特定课程主题获得的分数。
这是我的代码,以便更好地理解:
1. My script file | Inside of /home/my_username/bin
#! /bin/bash
title="Switch Menu"
prompt="Please pick an option :"
echo "$title"
PS3="$prompt"
select opt in "${options[@]}"
do
case $REPLY in
1) cat /home/result/MATH >>/home/student/Rick;;
2) echo "Goodbye !"; break;;
3) echo "The option $REPLY does not exit !";;
esac
done
2. My student files | Inside of /home/student
-rw-r--r-- 1 username username 0 month date time Rick
-rw-r--r-- 1 username username 0 month date time Josh
3. My result files | Inside of /home/result
-rw-r--r-- 1 username username 0 month date time MATH
-rw-r--r-- 1 username username 0 month date time HISTORY
cat MATH | Gives me
Rick 7
Josh 14
cat HISTORY| Gives me
Rick 18
Josh 11
现在,如果我运行我的脚本:切换菜单,
然后输入选项1,它会简单地复制我的所有内容数学文件,在我的里面瑞克文件。
虽然在我的数学文件中,也有分数乔什
不应该是这样的。
应该是这样的:一旦我点击“1”,它就会复制我各自学生的分数。
因此对于这个例子,它应该复制:
- 瑞克 7,位于 Rick 文件内。
- 乔什 14,位于 Josh 文件内。
答案1
如果我理解正确的话,您需要将结果文件(例如 math.txt)中的成绩添加到相应的学生文件(例如 rick.txt、josh.txt)中。
你现在所做的事情
cat /home/result/MATH >>/home/student/Rick;;
是不完整的。您需要找到一种方法来过滤和处理从数学文件读取的行中的信息。我不想给你一个完整的解决方案,因为这对我来说听起来像是家庭作业。但我会给你举个例子:
sh$ cat math.txt Mike 12 Romeo 8 Peter 13
以下命令
sh$ grep "Mike" math.txt Mike 12
只会返回一行。
此外,您可以将行拆分为单列。
sh$ grep "Mike" math.txt | cut -d' ' -f2 12
只会返回带有成绩的第二列。