adsense_in_article_test


[bash: for, sed, seq] 파일에서 홀수번째/짝수번째 행만 골라내기 리눅스 bash script

일단 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



핑백

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.



통계 위젯 (화이트)

25207
3300
2298703

2019 대표이글루_IT

B-Side