반응형

    정보

    • 업무명     : 리눅스 명령어를 이용하여 텍스트 정제 방법 소개

    • 작성자     : 이상호

    • 작성일     : 2020-02-09

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 기상 연구 및 웹 개발을 담당하고 있는 해솔입니다.

    • 오늘은 리눅스 (Linux) 명령어를 이용하여 텍스트 정제 방법을 소개드리고자 합니다.

     

     

    [특징]

    • 텍스트 정제를 위해서 리눅스 명령어 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

     

    [기능]

    • 수직 결합

    • 가로 결합

    • 행 추출

    • 열 추출

    • 행 변환

    • 기타

       

       

    [활용 자료]

    • 자료명 : 종관기상관측 (ASOS)

    • 자료 종류 : 기온

    • 확장자 : txt

    • 기간 : 2020년 02월 02일 - 2020년 02월 03일

    • 자료 해상도 : 1시간 평균

    • 제공처 : 기상자료개방포털

    • 자세한 정보는 아래 링크 참조

     

    [연구개발] 국내 기상/기후자료 데이터 시스템 이해

    정보 업무명 : 자유 서식 작성자 : 이상호 작성일 : 2019-12-13 설 명 : 수정이력 : 내용 [국내 기후자료 데이터시스템 이해] 최근 기후변화에 의한 이상기상이 일상화되어 가는 현시점에서 기후변화 대책 수립을..

    shlee1990.tistory.com

     

    Obs_Asos_20200202.txt
    0.00MB
    Obs_Asos_20200203.txt
    0.00MB
    Obs_Asos_Tmp.txt
    0.00MB

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 작업 환경 구축

    • 소스 코드 작성 및 실행

    • 실행 결과 확인

     

    [사용 OS]

    • Linux (CentOS v7.0)

    • VMware Workstation Pro v15.5

     

    [사용 언어]

    • Shell Script (Bash)

     

     소스 코드

    [명세]

    • 작업 환경

      • Obs_Asos_20200202.txt : 텍스트 예시

      • RunShell.sh : 실행 프로그램

     

    root@linux220 /S/B/09.Linux# cat INPUT/Obs_Asos_20200202.txt                                      (base) 
    108   서울  2020-02-02 01:00  0.6
    108   서울  2020-02-02 02:00  -0.1
    108   서울  2020-02-02 03:00  -0.9
    108   서울  2020-02-02 04:00  -1.5
    108   서울  2020-02-02 05:00  -1.3
    108   서울  2020-02-02 06:00  -1.6
    108   서울  2020-02-02 07:00  -1.6
    108   서울  2020-02-02 08:00  -2
    108   서울  2020-02-02 09:00  -1.4
    108   서울  2020-02-02 10:00  0.7
    108   서울  2020-02-02 11:00  2.7
    108   서울  2020-02-02 12:00  3.8
    108   서울  2020-02-02 13:00  4.8
    108   서울  2020-02-02 14:00  4.9
    108   서울  2020-02-02 15:00  5
    108   서울  2020-02-02 16:00  4.7
    108   서울  2020-02-02 17:00  4
    108   서울  2020-02-02 18:00  3.3
    108   서울  2020-02-02 19:00  2.6
    108   서울  2020-02-02 20:00  2
    108   서울  2020-02-02 21:00  1.9
    108   서울  2020-02-02 22:00  1.8
    108   서울  2020-02-02 23:00  1.8

     

    • 수직 결합

      • "cat file1 file2"를 통해 수직으로 결합

     

     

    #!/bin/bash
    
    echo "================ cat ===================="
    cat INPUT/Obs_Asos_20200202.txt INPUT/Obs_Asos_20200203.txt

     

     

    • 가로 결합

      • "paste file1 file2"를 통해 가로 결합

      • "join -t file1 file2"를 통해 내부 조인으로 결합

     

     

     

    #!/bin/bash
    
    echo "================ paste ===================="
    paste INPUT/Obs_Asos_20200202.txt INPUT/Obs_Asos_20200203.txt
    
    echo "================ join ===================="
    join -t , INPUT/Obs_Asos_20200202.txt INPUT/Obs_Asos_Tmp.txt
    

     

     

     

    • 행 추출

      • "grep regex"를 통해 정규식에 해당하는 행 추출

      • "grep -v regex"를 통해 정규식에 해당하지 않는 행 추출

      • "head -n count"를 통해 처음부터 count 행 추출

      • "tail -n count"를 통해 끝에서 count 행 추출

     

     

    #!/bin/bash
    
    echo "================ grep ===================="
    cat INPUT/Obs_Asos_20200202.txt | grep "2020-02-02 02:00"
    
    echo "================ grep -v ===================="
    cat INPUT/Obs_Asos_20200202.txt | grep -v "2020-02-02 02:00"
    
    echo "================ head ===================="
    head -n 5 INPUT/Obs_Asos_20200202.txt
    
    echo "================ tail ===================="
    tail -n 5 INPUT/Obs_Asos_20200202.txt

     

     

    • 열 추출

      • "cut -d "delimiter" -f fields"를 통해 지정된 열 추출

      • "awk -F "delimiter" '{print fields}'"를 통해 지정된 열 추출

     

     

    #!/bin/bash
    
    echo "================ cut -d ===================="
    cat INPUT/Obs_Asos_20200202.txt | cut -d " " -f 1
    
    echo "================ awk ===================="
    cat INPUT/Obs_Asos_20200202.txt | awk -F " " '{print $2}'

     

     

    • 행 변환

      • "sed 's/regex/replacement/g'"를 통해 "regeb""replacement"로 치환

      • "tr set1 set2"를 통해 "set1에 포함된 문자""set2에 포함된 문자"로 변환

      • "tr -d set"를 통해 "set에 포함된 문자"를 삭제

      • "tr -s set"를 통해 "set에 포함된 문자의 반복""문자"로 대치

     

     

    #!/bin/bash
    
    echo "================ sed ===================="
    
    sName="I like orange"
    
    echo $sName | sed "s/orange/apple/g"
    echo $sName | sed "s/[a-z]/x/"
    echo $sName | sed "s/[a-z]/x/g"
    echo $sName | sed "s/like \([a-z]\+\)/eat \1/"
    echo $sName | tr a-z A-Z
    echo $sName | tr -d aiueo
    echo $sName | tr -s p

     

     

    • 기타

      • "sort"를 통해 정렬

      • "sort -r"를 통해 내림차순으로 정렬

      • "uniq"를 통해 중복 행 제거

      • "uniq -c"를 통해 중복행 제거 및 개수 표시

      • "uniq -u"를 통해 고유 행만 표시

      • "uniq -d"를 통해 중복 행만 표시

      • "wc -l"를 통해 행 개수 확인

      • "wc -w"를 통해 단어 수 확인

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기