bash script (backup)2021. 2. 19. 16:36

 

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

 

수 계산에 유용한 bc 명령을 이용하면 10진수를 2진수나 16진수로, 또는 그 반대로 변환할 수 있다. bc 명령에 대한 내용은 이전 게시물을 참고하자. 여기로 

 

일단 아래의 예시를 보자.

# 10진수를 2진수로 변환 (obase 변경)
echo "obase=2; 27" | bc
11011

bc에는 출력값과 입력값의 기수(base)를 설정하는 변수가 있는데, 각각 obase와 ibase이다. (기본적으로 10진수를 사용하므로 기본값은 둘 다 10이다.) obase 값을 2로 설정하면 출력값이 2진수로 표현된다. 반대로 2진수를 10진수로 변환하려면 ibase 값을 2로 설정하면 되겠다.

# 2진수를 10진수로 변환 (ibase 설정)
echo "ibase=2; 11011" | bc
27

# 2진수를 16진수로 변환
# obase 설정 이후 ibase 설정
echo "obase=16; ibase=2; 11011" | bc
1B

obase와 ibase를 둘 다 설정할 경우 obase 설정이 먼저 나와야 한다. 왜 그러냐 하면, 예를 들어 ibase를 먼저 2로 설정하면 그 다음에 obase를 설정할 때 입력할 값이 먼저 설정된 ibase 기준(즉 2진법)으로 되어야 하기 때문이다. 2진수를 16진수로 변환할 때 ibase를 먼저 설정하는 경우는 아래와 같이 좀 복잡해진다.

# 2진수를 16진수로 변환
# ibase 설정을 먼저 하는 경우
echo "ibase=2; obase=10000; 11011" | bc
1B

입력값의 기수를 정하는 ibase가 먼저 2진수로 설정되었기 때문에, obase를 16진수로 설정하려면 16을 2진수로 변환한 10000을 obase 값으로 설정해 주어야 한다. 복잡하다.

 

Posted by 반달가면

댓글을 달아 주세요

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

댓글을 달아 주세요