줄의 특정 기호 수로 문자열 줄이있는 파일을 정렬하는 방법은 무엇입니까?


2

모든 줄에 문자열이있는 큰 일반 텍스트 파일이 있다고 가정 해보십시오. 문자열 _은 문자열을 음절로 나누는 밑줄을 제외하고 알파벳 문자로만 구성됩니다 .

문자열의 밑줄로 텍스트 파일을 정렬하고 싶습니다. X 그룹의 모든 밑줄을 자체 파일에 넣을 때 보너스 포인트.

예:

hel_lo
hi
su_per_u_ser
o_ver_flow

다음과 같이 분류됩니다.

hi
hel_lo
o_ver_flow
su_per_u_ser

정규식 으로이 작업을 시도했지만 밑줄을 계산하는 적절한 방법을 아직 찾지 못했습니다 (정규식이 나를 혼란스럽게합니다).

아무도 내가 어떻게 처리 할 수 ​​있는지 알고 있습니까?

답변:


3

파이썬은 이것을 쉽게 만듭니다 ...

open('out.txt', 'w').write('\n'.join(sorted(open('in.txt'), key=lambda x: x.count('_'))))

매력처럼 작동합니다! 불필요한 빈 줄을 제거하기 위해 \ n을 제거했습니다. 그리고 파이썬 스크립트를 실행하는 방법도 알아 내야했습니다. 감사!
SpacyRicochet

4

간단한 코드 awk:

#!/usr/bin/awk -f

BEGIN   { FS = "_" }        # field separator = syllable separator
        {                   # for each input line
            if(NF > 0)      # if number of syllables > 0
                print $0 > "syllable-"NF".txt"  # print the line to a file
        }

스크립트를 파일에 넣은 다음 파일에 넣으십시오 chmod a+x. 입력은 stdin스크립트에 매개 변수로 지정된 파일에서 올 수 있습니다 .

출력은 음절 수인 syllable-x.txtwhere 파일로 정렬됩니다 x.


1

더 간단합니다 : bash one-liner :

 cat testfile | while read line; do echo $line >> srt$(echo $line | fgrep -o _ | wc -l).txt ; done 

출력은 srtN.txt라는 파일에 나타납니다. 여기서 N은 줄에서 밑줄 문자의 발생 횟수입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.