bash script (backup)2020. 11. 24. 13:56

 

반달가면 이글루에서 백업 - bahndal.egloos.com/451901

 

일단 my_file.txt에서 홀수번째 행만 골라서 출력하는 경우를 생각해 보자. 이 예시를 보면 짝수번째 행을 고른다던가 5, 10, 15... 번째 행만 고르는 경우도 저절로 감이 잡힐 것이다.

 

# my_file.txt의 홀수번째 행만 출력

print=p

max_line=`cat my_file.txt | wc -l`

for line_num in `seq 1 2 $max_line`

do

  sed -n $line_num$print my_file.txt

done

 

우선 my_file.txt에 행이 몇개나 되는지 계산해서 이 값을 변수 max_line에 할당하고, seq 명령을 이용해서 1부터 $max_line까지 홀수를 만든 후 for 반복문에 적용했다.

 

sed 명령을 이용해서 파일의 특정 행을 출력하는 방법은 아래와 같다.

 

sed -n [행번호]p [파일명]

 

# my_file.txt에서 12번째 행을 출력

sed -n 12p my_file.txt

 

여기서는 행번호가 변수 line_num이므로 여기에 p를 같이 쓰면 변수 line_nump로 해석된다. 이를 방지하기 위해 p를 변수 print에 할당하고 $line_num$print 이런 식으로 사용.

 

또한 -n 옵션을 주지 않으면 지정된 행을 출력한 후 파일 내용 전체를 출력하게 되므로 잊지 말고 -n 옵션을 써서 해당되는 행만 출력되도록 하자.

 

짝수행만 고르고 싶다면 for 명령에 적용한 seq 부분을 `seq 2 2 $max_line` 이런 식으로 바꾸면 되겠다. 출력하려는 행을 정하기 위해 이용한 seq 명령에 대한 설명은 이전 게시물을 참조하자. 기본적으로 형식은 아래와 같다. 

 

seq [시작번호] [간격] [끝번호]

참고로 파일의 특정 부분, 예를 들어 3번째 행부터 15번째 행까지를 골라내고 싶다면 아래와 같은 형식으로 사용하면 되겠다. 

 

# 형식: sed -n [시작행],[마지막행]p [파일명]

sed -n 3,15p my_file.txt

 

 

Posted by 반달가면

댓글을 달아 주세요