알파벳 순서로 시퀀스 찾기

알파벳 순서로 시퀀스 찾기

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입력이 이미 정렬되었는지 여부를 나타내기 위해 's -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 문을 사용하여 마지막 문자가 다음 문자보다 작은지 확인할 수 있습니다.

관련 정보