特定の行を特定のフォルダにコピーする方法は? - Debian/Bash/Linux

特定の行を特定のフォルダにコピーする方法は? - Debian/Bash/Linux

ファイルの特定の行を特定のフォルダ名にコピーしようとしています。そして、フォルダ名は行名と同じでなければなりません。

フォルダが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 1行だけが返されます。

行を単一の列に分割することもできます。

sh$ grep "Mike" math.txt | cut -d' ' -f2 12 成績を含む2番目の列のみが返されます。

関連情報