다음과 같은 여러 줄의 텍스트 파일이 있습니다.
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"
효과가있다! 건배! !