[Linux] 리눅스 명령어를 이용하여 텍스트 정제 방법 소개

정보

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

  • 작성자     : 이상호

  • 작성일     : 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