grepコマンドの結果を繰り返し、ループ内の各値の条件を確認するにはどうすればよいですか?

grepコマンドの結果を繰り返し、ループ内の各値の条件を確認するにはどうすればよいですか?

したがって、特定のパターンで始まる個々の行には、一部の人のフルネーム(姓と名前)を含むファイルがあります。 grepコマンドの助けを借りて、フルネームのみを抽出して変数に保存することができました。次に、各フルネームにアクセスして、他の変数のいくつかの値と一致することを確認する必要があります。 forループを試してみましたが、名前と姓の間にスペースがあるため、別の項目として扱います。名前と姓を一緒に入力し、異なる変数で確認する必要があります。

例えば。 grepコマンドを実行すると、3つの値が取得され、変数名に格納されます。

Abc xyz
Pqr def
Lmn ghi

次のように for ループを実行します。

for n in $names; do
 echo $n
   if [ "$n" = "Abc Pqr" ]; then
    echo "something"
   fi
done

次の出力を提供します。

Abc
xyz
Pqr
def
Lmn
ghi

$nどちらも欲しいですAbc xyz(名前そして城)を一緒に集めて状況を確認できるようにしました。

ベストアンサー1

あなたの疑似コードを含めるようにあなたの質問の形式を指定しましたが、あなたの試みはうまくいきません。変数$namesは配列ではなく、改行文字を含む1つの長い文字列です。これが将来このような文字列を繰り返す方法です。

names.txt以下は、プロセスをシミュレートするために使用するサンプルファイルです。

###                 names.txt                  ###
### our sample file to grep over as an example ###
##################################################
Abc xyz
Pqr def
Lmn ghi

コードは以下のように表示されます。


names=$(grep -v '^#' names.txt)

i=1;
while read n; do 
  echo "Name $i. $n"
  if [[ "$n" == "Pqr def" ]]; then
      echo "--- $n was found at line $i"
  fi    
  i=$(($i+1)); 
done <<< "$names"

出力は次のとおりです。

Name 1. Abc xyz
Name 2. Pqr def
--- Pqr def was found on line 2
Name 3. Lmn ghi

おすすめ記事