알파벳 순서 찾기

알파벳 순서 찾기

정렬하지 않고 txt 파일에서 모든 시퀀스를 알파벳순으로 찾고 싶습니다.

예: 텍스트 파일이 다음과 같다고 가정합니다.

aedftg
wqof
abcdef
oufn
pqrs
aabcd

출력은

abcdef
pqrs

와 같이 반복되는 문자도 없습니다 aabcd.

답변1

옵션 중 하나(영어로 하드코딩됨):

grep -ix 'a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*' input

~에 귀속됨닌자 곰 원숭이머릿속에서 떠오르는 아이디어를 명확히 했습니다. 반복되는 문자( aabcc)를 허용하도록 정규식을 수정했습니다.

또 다른 옵션:

sort더 나은 접근 방식 은 알파벳을 하드코딩할 필요가 없도록 로케일별 데이터 정렬 검사를 사용하는 것입니다. ~처럼마이크 존스가 해냈어, 이는 해당 줄의 문자를 별도의 줄로 분할해야 함을 의미합니다. sed 호출을 방지하기 위해 쉘 스크립트(부분 문자열 확장을 지원하는 최신 쉘 사용)를 사용하고 sort-c 옵션을 사용하여 입력이 정렬되었는지 여부를 나타냅니다.

while IFS= read -r line
do
  for((i=0; i < ${#line}; i++))
  do
    printf '%s\n' "${line:i:1}"
  done | sort -c 2>/dev/null && printf '%s\n' "$line"
done

차이점이 발견 되면 sortstderr로 출력하지만 우리는 반환 코드만 신경쓰므로 stderr을 제거했습니다.

영어가 아닌 입력 데모( $문자는 쉘 프롬프트임):

$ cat input
αβγα
αβγ
$ ./sorted2 < input
αβγ
$

답변2

완전성을 위해 awk스키마와 데이터의 일반적인 관계가 교환되는 기반 솔루션은 다음과 같습니다.

awk 'BEGIN{ref="abcdefghijklmnopqrstuvwxyz"} ref ~ $0' file.txt

이는 파일의 행을 에서 까지 a의 정렬 문자의 "참조" 문자열 z과 일치하는 정규식으로 해석합니다. 일치하는 항목이 있는 경우에만 a ... z행이 인쇄됩니다 (즉, 행의 문자열이 의 하위 문자열임을 의미 ).

답변3

perl -MPOSIX -Mopen=locale -lne '
   print unless m{(.)(.)(?(?{strcoll($1, $2) < 0})(*FAIL))}' < file

file사용자 로캘에서 이전 문자 다음에 정렬되지 않는 문자가 포함된 줄을 제외하고 줄이 인쇄됩니다 .

답변4

cat homework.txt | while read aline; do 
    stringORIG=$(echo -n "$aline" | sed 's/\(.\)/\1\n/g')
    stringABC=$(echo -n "$aline" | sed 's/\(.\)/\1\n/g' | sort)
    if [ "$stringORIG" == "$stringABC" ]; then
        echo "$aline"
    fi
done

.

abcdef
pqrs

ps...sort 명령을 사용하지 않으려면 각 문자를 int로 변환하고 if 문을 사용하여 마지막 문자가 다음 문자보다 작은지 확인할 수 있습니다.

관련 정보