스크립트
Posts
84 posts[bash: awk] awk에서 영역 구분을 이용한 문자열 재구성 작업 (gensub)
예전에 sed에서 역슬래시-괄호를 이용한 영역 구분 및 문자열 재구성 작업 방법을 정리해 두었는데, 같은 종류의 작업을 awk에서도 할 수 있다. 문자열의 영역을 설정해서 자리를 바꾸거나 내용을 대체하거나 하는 등의 작업이다. 우선 awk에서 제공하는 gensub 함수를 보자. 통상적인 문자열 대체는 sub, gsub 함수를 사용할 수 있지만 영역을 설정하는 것은 gensub 함수를 이용해야 한다. (sub, gsub 함수에 대한 내용은 이전 게시물을 참고하자. 여기로) gensub 함수의 형식은 아래와 같다. gensub(/문자열 또는 정규표현식/, "대체할 문자열", 실행옵션, 대상) "대상" 문자열에서 "/문자열 또는 정규표현식/"을 찾아서 "대체할 문자열"로 바꾼다. 실행 옵션은
[bash: sed] 대용량 파일에서 특정 위치의 행만 출력하기
파일에서 특정한 행을 출력하기 위해서 sed 명령을 활용하게 되는데, 통상 아래의 예시와 같은 형태로 쓰게 된다. # my_data.txt 파일에서 124번째 행을 출력 sed -n 124p my_data.txt # my_data.txt 파일에서 100번째 행부터 110번째 행까지 출력 sed -n 100,110p my_data.txt 파일 용량이 별로 크지 않으면 위와 같은 형태로도 별 문제가 없다. 그러나 수백MB 이상의 대용량 파일에서 특정 부분을 출력해야 하는 경우에, 특히 이런 작업을 여러번 반복해야 하는 경우에는 상당한 시간이 걸릴 수 있다. 예를 들어 500MB 파일에서 100번째 행만 출력하는 상황이라도, sed는 파일을 처음부터 끝까지 다 읽은 후에 작업을 종료하기
[bash: awk] 다중 문자열 검색 - 2
예전에 적었던 awk를 이용한 다중 문자열 검색에 대한 보충. 문자열 A와 문자열 B가 모두 포함된 경우(A and B)와 둘 중 하나가 포함된 경우(A or B)에 대하여 아래와 같이 입력하여 검색할 수 있다. 교집합(and)은 "&&", 합집합(or)은 "||" 기호를 사용하면 된다. # my_data.txt에서 A와 B가 모두 포함된 행 출력(A and B) awk '/A/ && /B/' my_data.txt # my_data.txt에서 A 또는 B가 포함된 행 출력(A or B) awk '/A/ || /B/' my_data.txt 위와 같은 형식을 이용해서 좀 더 복잡한 검색을 해 볼 수 있다. 예를 들어 첫번째 항목(field)에 A가 포함되어
[bash: sed] 텍스트 파일의 문자열 수정/변경
sed에서 -i 옵션을 추가하면 작업한 내용이 텍스트 파일에 반영되어 저장된다. 우선 간단한 예시를 보자. my_data.txt 파일에서 문자열 "abc"를 "123"으로 대체하는 경우다. -i 옵션이 없으면 대체된 내용이 화면으로 출력된다. # 파일 내용 확인 cat my_data.txt abc def abc 111 # "abc"를 "123"으로 대체 sed 's/abc/123/' my_data.txt 123 def 123 111 # 대체한 결과를 my_data.proc.txt에 저장 (I/O 리다이렉션) sed 's/abc/123/' my_data.txt > my_data.proc.txt -i 옵션을 추가하면 결과를 화면에 출력하는 대신 해당 파일을 변경하여



