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는 배열이 아니라 개행 문자가 포함된 하나의 긴 문자열입니다. 이것이 미래에 그러한 문자열을 반복할 수 있는 방법입니다.

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

관련 정보