bash script (backup)2021. 2. 9. 14:02

 

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

 

연속적인 수를 생성해 주는 seq 명령에서 유용한 옵션들을 정리해 두기로.

일단 seq 명령에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로

 

아래의 예시들을 참고하자.

# 기본 명령: 2에서 4까지 생성하는 예시
seq 2 4
2
3
4

한줄에 하나씩 출력하지 않고 특정한 구분자(separator)를 사용하고 싶다면 -s 옵션을 이용하면 된다.

# 구분자를 콜론으로 변경: -s 옵션
seq -s ":" 2 5
2:3:4:5

 


구분자를 탭으로 변경하고 싶다면 echo 명령에서 -e 옵션을 사용.  따옴표에 유의하자. echo 부분을 역따옴표(`)로 감싼 후 이것을 다시 따옴표(")로 감싸주어야 한다.

# 구분자를 탭으로 변경
seq -s "`echo -e '\t'`" 2 5
2    3    4    5

 

출력값의 자리수를 맞추고 싶다면 -w 옵션을 사용하면 된다. 가장 긴 출력의 자리수에 맞춰서 앞에 0을 추가해 준다. 아래의 예시를 보자.

# 자리수 맞춤
seq -w 8 10
08
09
10

# 9에서 10까지 0.5 간격으로
seq -w 9 0.5 10
09.0
09.5
10.0

출력 형식을 정하고 싶다면 -f 옵션을 사용. -f 옵션과 -w 옵션은 같이 사용할 수 없으며 둘 중 하나만 사용해야 한다. -f 옵션에서는 C언어의 printf 형식을 사용할 수 있는데, 전부 다 쓸 수 있는 것은 아니고 %e, %f, %g 정도가 가능한 듯. 아래의 예시를 보자.

# %.2f: 소수점 아래 2자리까지 출력, 2부터 3까지 0.5 간격으로
# 정수부분만 출력하고 싶다면 %.0f 사용
seq -f "the number is %.2f" 2 0.5 3
the number is 2.00
the number is 2.50
the number is 3.00

# %e: 지수표현으로 출력, 200부터 300까지 50 간격으로
seq -f "the number is %.2e" 200 50 300
the number is 2.00e+02
the number is 2.50e+02
the number is 3.00e+02

# %g: 부동소수점(%f) 또는 지수표현(%e)중 출력값 길이가 짧은 쪽으로 선택해서 출력
seq -f "the number is %g" 2 0.5 3
the number is 2
the number is 2.5
the number is 3

 

Posted by 반달가면

댓글을 달아 주세요

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 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 28. 13:22

 

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

 

특정 범위의 수자를 차례로 만들어야 할 때는 seq 명령을 쓰면 되겠다. 형식은 아래와 같다.

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

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

아래의 예시를 보자.

# 3부터 7까지 순서대로 출력
seq 3 7
3
4
5
6
7

# 3부터 10까지 2 간격으로 출력
seq 3 2 10
3
5
7
9

for 명령을 이용한 반복작업에도 활용할 수 있다.

start_num=3
end_num=10
interval=2
for i in `seq $start_num $interval $end_num`
do
echo "the number is $i"
done

 

Posted by 반달가면

댓글을 달아 주세요