bash script2023. 10. 17. 08:40

 

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

UTC (GMT) 기준으로 되어 있는 시간을 로컬(한국) 시간으로 변환하는 방법이다. date 명령에서 -d 옵션을 사용한다. 예시를 보면 금방 감이 잡힐 것이다.

# UTC 기준 2021년 6월 18일 20시 24분 10초를 한국 시간으로
date -d "TZ=\"UTC\" 2021-06-18 20:24:10"
Sat 19 Jun 2021 05:24:10 AM KST

# 출력 형식 지정 추가
date -d "TZ=\"UTC\" 2021-06-18 20:24:10" "+%Y.%m.%d %H:%M:%S"
2021.06.19 05:24:10

-d 옵션에서 TZ="UTC"라는 내용을 지정하여 입력하는 시간이 UTC 기준이라는 점을 명시했다. TZ값을 따옴표로 묶어야 하는데, -d 옵션을 사용할 때도 따옴표를 사용했으므로 역슬래시(\)를 이용해서 TZ값 지정에 사용된 따옴표를 리눅스 shell에서 해석하지 않도록 했다는 점에 유의(TZ=\"UTC\").

참고로 -d 옵션으로 어제, 내일 등을 지정하는 방법은 여기로

728x90
Posted by 반달가면
bash script2023. 10. 17. 08:38

 

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

리눅스 bash 스크립트의 if 조건문에서 정수(integer)의 크기 비교는 기본적으로 제공된다.

x=2
y=-1

if (( $x > $y ))
then
  echo "x의 값이 y의 값보다 큽니다."
fi

if [[ $x -gt $y ]]
then
  echo "x의 값이 y의 값보다 큽니다."
fi

만약 비교하고자 하는 수자가 실수(부동소수점)인 경우에는 위의 예시와 같은 비교를 할 수 없다. 이럴때는 bc와 조합을 하면 되겠다. 우선 bc와 관련한 아래의 예시를 보자.

x=2.34
y=0.45

# x의 값이 y의 값보다 크면 1을 출력, 그렇지 않으면 0을 출력
echo "$x > $y" | bc

# x의 값이 y의 값과 같으면 1을 출력, 그렇지 않으면 0을 출력
echo "$x == $y" | bc

위의 예시를 if 조건문과 조합하면 아래와 같이 비교를 할 수 있다. bc에서 출력한 값이 0인지 1인지를 판정하도록 하면 된다.

if [[ `echo "$x > $y" | bc` -eq 1 ]]
then
  echo "x의 값이 y의 값보다 큽니다."
fi

728x90
Posted by 반달가면
bash script2023. 10. 16. 08:50

 

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

우선, 리눅스에서 bc를 이용한 산수 계산에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로

bc로 계산한 결과 값이 -1에서 1 사이일 경우, 정수 자리의 0은 표시되지 않는다. 아래의 예시를 보자.

echo "scale=2; 10/11" | bc
.90

echo "scale=2; -11/12" | bc
-.91

위의 예시에 나온 결과값을 0.90, -0.91 이렇게 표시해 주고 싶을 경우, bc 자체적인 옵션은 없는듯하고, sed를 이용해서 아래와 같이 대체를 해 줄 수 있다. sed를 이용한 문자열 대체의 기본은 여기로

결과값이 양수일 경우와 음수일 경우를 각각 대체해야 하므로, sed에 -e 옵션을 사용하여 두가지 대체 방법을 지정해 준다. -e 옵션에 대한 내용은 여기로

echo "scale=2; 10/11" | bc | sed -e 's/^-\./-0\./' -e s'/^\./0\./'
0.90

echo "scale=2; -11/12" | bc | | sed -e 's/^-\./-0\./' -e s'/^\./0\./'
-0.91

대체 규칙을 설명하자면, 정규표현식의 "^" 기호를 이용하여 "."으로 시작하는 문자열(^.)을 "0."으로 대체하고 "-."으로 시작하는 문자열(^-.)을 "-0."으로 대체하도록 하는 것이다.

728x90
Posted by 반달가면
bash script2023. 10. 16. 08:46

 

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

큰 텍스트 파일 내용의 마지막 부분을 보고 싶을 때 tail 명령을 사용할 수 있다. 예를 들어 my_file.txt 파일의 마지막 5개 행을 출력하려면 아래와 같이 입력하면 되겠다. -n 옵션에 마지막 몇개의 행을 출력할 것인지 지정할 수 있다.

# my_file.txt 파일의 마지막 5개 행을 출력
tail -n 5 my_file.txt

또 한가지 방법은 특정 행번호부터 마지막까지 출력하는 방식이다. -n 옵션에서 수자 앞에 "+" 기호를 추가한다. 예를 들어 my_file.txt 파일의 10번째 행부터 마지막까지 출력하려면 아래와 같이 입력한다.

# my_file.txt 파일의 10번째 행부터 마지막까지 출력
tail -n +10 my_file.txt

cat 명령과 조합해도 결과는 동일하다.

# 마지막 5개 행 출력
cat my_file.txt | tail -n 5

# 10번째 행부터 마지막까지 출력
cat my_file.txt | tail -n +10

파일 내용이 갱신되고 있는 상황에서 새로운 내용(행)이 추가될 때마다 그 내용을 출력하려면 -f 옵션을 사용한다. 어떤 작업을 실행하는 과정에서 로그 파일에 추가되는 내용을 실시간으로 확인하고 싶을 때 편리하다.

# my_file.txt의 마지막 행을 갱신하면서 출력
tail -f my_file.txt

tail과 대비되는 명령으로 텍스트 파일의 앞부분을 출력하는 head가 있는데, head에 관한 내용은 이전 게시물을 참고하자. 여기로

728x90
Posted by 반달가면