
정렬하지 않고 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
차이점이 발견 되면 sort
stderr로 출력하지만 우리는 반환 코드만 신경쓰므로 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 문을 사용하여 마지막 문자가 다음 문자보다 작은지 확인할 수 있습니다.