
したがって、特定のパターンで始まる個々の行には、一部の人のフルネーム(姓と名前)を含むファイルがあります。 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