×

    텍스트 자료 처리를 위한 bash 명령어2 : 텍스트 조물거리기

    Bash functions to manipulate text

    wc

    -c(바이트 수), -m(문자수), -w(단어수), -l(라인수)

    # 라인 수
    wc -l your_text.txt
    

    grep

    -i(대소문자 무시), -c(결과 라인 수), -n(라인 번호 함께), -v(일치하지 않는 라인)

    # 빈 라인 제거
    grep -v '^$' your_text.txt > your_text_without_empty_lines.txt
    

    tn

    tr [<option>] <집합b> [<집합a>]
    

    -c(집합b에 명시되지 않은 모든 문자), -d(집합b에 명시된 문자 삭제) -s(집합b에 명시된 문자가 연속으로 나타날 경우 하나로 축약)

    파일 이름을 받지 않는다. 따라서 < 이용

    # 모든 대문자를 소문자로 교체
    tr 'A-Z' 'a-z' < your_text.txt
    
    # 공백을 기준으로 개행
    tr ' ' '\n' < your_text.txt
    
    # 알파벳을 제외한 모든 문자를 기준으로 개행 (영문자에 대한 tokenizing)
    tr -sc 'A-Za-z' '\n' < your_text.txt
    
    # 연속된 공백을 하나로 합침
    tr -s ' ' < your_text.txt
    

    sort

    -n(수치 정렬), -r(역순 정렬), -k start[, stop](필드를 기준으로 정렬, start에서 stop까지)

    sort 명령어는 locale의 영향을 받음

    # 문자열 정렬
    sort your_text.txt
    # 숫자 오름차순
    sort -n your_text.txt
    # 숫자 내림차순
    sort -nr your_text.txt
    # 필드 정렬
    sort -k1,1 -k2,2n your_text.txt
    # locale과 상관 없이 코드값에 의한 정렬을 할 때
    LC_ALL=C sort your_text.txt
    

    uniq

    앞뒤 행만 비교하기 때문에 sort가 되어 있어야 전체 문서를 정리할 수 있다.

    -c(출현 횟수를 함께 출력), -d(연속해서 중복된 라인만 출력), -u(중복되지 않은 라인만 출력, -d의 반대)

    sort sample | uniq
    

    cut

    원하는 필드만 잘라냄

    -c(선택할 문자 위치 지정), -f(필드 지정), -d(필드 구분자, 기본 구분자는 ‘\t’ )

    # 1-7번째 문자 선택
    cut -c 1-7 your_text.txt
    # 9번째 이후 문자 선택
    cut -c 9- your_text.txt
    # tab으로 구분된 첫번째 필드 선택
    cut -f1 your_text.txt
    # tab으로 구분된 두번째 필드 선택
    cut -f2 your_text.txt
    # 공백으로 구분된 첫번째 필드 선택
    cut -d' ' -f1 your_text.txt
    

    paste

    둘 이상의 파일의 같은 라인을 결합

    -d(필드 구분자, 기본 구분자는 ‘\t’ ), -s(직렬 결합 ,가로로)

    paste abc 123
    # 가로로
    paste -s abc 123
    

    diff

    # 두 파일 비교
    diff file1 file2
    

    응용예

    # 일반적인 영문 텍스트에서 단어 토큰 빈도순으로 정리해보자
    tr 'A-Z' 'a-z' < sample_text.txt | tr -sc '[A-Za-z]' '\n' | sort -i | uniq -c | sort -nr | tr -s ' ' > tmp.txt
    cut -d ' ' -f2 tmp.txt > freq
    cut -d ' ' -f3 tmp.txt > list
    paste list freq > sample_text_token_freq.txt
    
    # 위의 결과를 빈도순으로 정렬 (빈도가 같은 경우에는 알파벳)
    sort -k2,2nr -k1,1 sample_text_token_freq.txt > sample_text_token_freq_sort.txt
    

    REF

    ... ... ... ...
    Back