[Cookbook] Bash에서 text(string) 다루기, 이럴 때 이렇게 한다.
기초
여러 파일을 separator를 추가하여 합쳐보자.
# append a newline after each file
sed -s '$G' *.txt > all.txt
# append a line of 8 dashes and a newline after each file
sed -s '$a--------' *.txt
# Insert a line of dashes before each file:
sed -s '1i--------' *.txt
# Do the same, but without a newline after the dashes:
sed -s '1s/^/--------/' *.txt
# Put a line of dashes on the end of the last line of each file:
sed -s '$s/$/--------/' *.txt
# Surround each file with curly braces:
sed -s -e '1i{' -e '$a}' *.txt
REF
파일에서 어떤 부분을 지워보자
빈줄을 지워보자.
sed '/^$/d' text.txt
특정 패턴을 지워보자
# 정규식으로 "((OR))"로 시작하는 줄만 지워보자
sed -r '/^\(\((OR)\)\)/d' org.txt > rst.txt
특정 패턴만 남기고 지워보자
# 정규식으로 "((OR))"로 시작하는 줄만 남기고 지워보자
sed -r '/^\(\((OR)\)\)/!d' org.txt > rst.txt
폴더 속에 있는 텍스트 파일의 글자 길이를 알아보자.
ls | xargs wc -c
REF
파일 속에서 불필요한 내용을 빼고 토큰을 공백으로 구분해보자.
아래와 같이 clean_and_tokenize.sh
배치 파일을 만들어 실행한다.
#!/bin/bash
# clean_and_tokenize.sh inputfile.txt outputfile.txt
tr '[:upper:]' '[:lower:]' < $1 | # 입력파일($1)을 받아 대문자를 소문자로 바꾼다.
tr '[:punct:]' ' ' | # 구두기호를 스페이스 한 칸으로 바꾼다.
tr '[:space:]' ' ' | # 공백을 스페이스 한 칸으로 바꾼다.
tr -cd '[:alnum:] ' | # 모든 숫자와 알파벳을 제외한('-c') 글자를 삭제('-d')한다.
tr -s ' ' > $2 # 연속된('-s') 공백을 스페이스 한 칸으로 바꾼다. # 결과 파일($2)에 넣어 준다.
REF
파일 속에 있는 단어 당 출현 빈도를 목록으로 만들어 보자.
아래와 같이 word_freq.sh
배치 파일을 만들어 실행한다.
단어는 공백을 기준으로 구분한다.
#!/bin/bash
# word_freq.sh inputfile.txt outputfile.txt
tr ' ' '\n' < $1 | # 입력파일($1)을 받아 공백을 모두 개행으로 찾아 바꾼다.
sort -S 10G | # 소팅한다
uniq -c | # 등장 단어와 횟수를('-c') 출력한다
awk '{print $2" "$1}' > $2 # 원하는 부분만 빼서 # 결과 파일($2)에 넣어 준다.
REF