bash script2023. 7. 25. 13:51

 

반달가면 이글루에서 백업 - 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;)하게 된다. 

728x90
Posted by 반달가면