문자열을 가져와 배열의 출력을 비교하고 동일한지 확인하는 스크립트

문자열을 가져와 배열의 출력을 비교하고 동일한지 확인하는 스크립트

다음과 같은 여러 줄의 텍스트 파일이 있습니다.

djfldfjd:lisa
ldj:roma
dkjdkjflddlsdkjdlkj:kathy
ldadkjfdsldkjdlkfjdlkkkkkkkkkkkkkkkkkkkkl:purple
dkjdljl:christine
kdllkldkjhhhhhhhhhhhhhhh:george
ldkjfdl:kathy

이제 필요한 것은 위 텍스트 파일의 모든 줄을 처리하고 콜론 뒤에 나타나는 문자열을 비교하고 콜론 뒤에 반복되는 문자열을 가져와 해당 문자열을 콜론 앞에 인쇄하는 스크립트입니다.

그래서 아래 스크립트를 사용해 보았지만 아래에 언급된 오류가 발생했습니다.

#!/usr/bin/sh

input="test.txt"

cat $input | while read line; do output= $(echo $line | cut -d":" -f2);  done

for (( i = 0 ; i < "${#output[@]}" ; i++ ))
{
      echo ${output[i]}
}

에러 메시지: ./compare.sh: line 11: test1: command not found

어떤 도움이라도 대단히 감사하겠습니다. 감사해요.

답변1

스크립트가 sh구문을 사용하지 않습니다. ksh와 zsh 구문이 혼합된 것처럼 보입니다. 기본 구문 검사를 위해 shellcheck(온라인으로 사용 가능하거나 시스템에 설치할 수 있는 독립 실행형 유틸리티로 사용 가능)를 사용할 수 있습니다.

하지만 어쨌든 텍스트를 처리하려면쉘 루프를 사용하고 싶지 않습니다..

오히려 텍스트 처리 도구를 사용하는 것이 좋습니다. 여기에서 고정 구분 기호가 있는 필드에 서식이 지정된 텍스트의 경우 다음과 같습니다 awk.

#! /usr/bin/sh -
input=test.txt
awk -F: '
  second_pass {if (count[$2] > 1) print $1; next}
              {count[$2]++}' "$input" second_pass=1 "$input"

답변2

알겠습니다. 새로 추가한 내용은 다음과 같습니다.

awk -F: 'second_pass {if (count[$2] > 1) print NR-1 "," $1; next} {count[$2]++}' "$input" second_pass=1 "$input"

효과가있다! 건배! !

관련 정보