반달가면 이글루에서 백업 - http://bahndal.egloos.com/592308
파일에서 특정한 행을 출력하기 위해서 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는 파일을 처음부터 끝까지 다 읽은 후에 작업을 종료하기 때문이다. 그러므로, 파일 크기가 클 때는 출력하고자 하는 행에 도달하면 출력을 하고 그대로 종료하도록 하면 훨씬 효율적이다. 아래의 예시를 보자.
# my_big_data.txt 파일에서 124번째 행을 출력
sed -n "124{p;q;}" my_big_data.txt
위와 같이 sed의 행번호 지정 부분에서 "p" 대신에 "{p;q;}" 이렇게 하면 해당되는 행을 출력한 후 파일을 끝까지 읽지 않고 곧바로 프로세스를 종료한다. 리눅스 shell에서 세미콜론(;)이 해석되지 말아야 하므로 해당 인자를 반드시 따옴표로 묶어준다는 점에 유의.
출력 범위를 지정할 경우에는 아래와 같이 한다.
# my_big_data.txt 파일에서 100번째 행부터 110번째 행까지 출력
sed -n "100,110p;110q;" my_big_data.txt
100번째 행부터 110번째 행까지 출력(100,110p;)한 후에 110번째 행에서 종료(110q;)하게 된다.
'bash script' 카테고리의 다른 글
[bash: while, date] 특정 기간 동안의 연속된 날짜 출력하기 (0) | 2023.07.27 |
---|---|
[bash: awk] awk에서 영역 구분을 이용한 문자열 재구성 작업 (gensub) (0) | 2023.07.25 |
[bash: awk] 다중 문자열 검색 - 2 (0) | 2023.07.25 |
[bash: sed] 텍스트 파일의 문자열 수정/변경 (0) | 2023.07.25 |
[bash: awk] 출력할 내용을 조건에 따라 여러 파일로 나누어 저장하기 (0) | 2023.07.22 |