BASH

포스트: 81
Tags

Posts

81 posts

[bash: timeout] 특정 명령어/프로세스에 대한 실행 시간 제한 설정

반달가면|2017년 3월 27일

특정 명령어 또는 프로세스의 실행 시간을 제한해야 할 경우 timeout을 이용할 수 있다. 어떤 작업이 일정 시간 안에 끝나지 않으면 강제로라도 끝내야 하는 상황이 있을 경우, 또는 특정 프로세스가 버그 등으로 인해 무한히 끝나지 않고 헤멜 가능성이 있다고 생각될 경우에 요긴하다. 아래의 예시를 보자. # 실행 시간 제한 3.5초 timeout 3.5s sleep 10 # 종료 상태(exit status) 확인 echo $? 124 위의 예시를 보면 sleep으로 10초간 대기하라는 명령이지만 실행 시간 제한을 3.5초로 설정했으므로 3.5초후에 sleep 프로세스는 강제 종료된다. 예시를 하나 더 보자. # 실행 시간 제한 2분 timeout 2m sleep 10

[bash: basename] 디렉토리는 제외하고 파일명만 추출하기

반달가면|2017년 3월 13일

특정 파일에 대해 작업을 할 때, 해당 파일의 디렉토리는 제외하고 파일명만 추출해야 할 필요가 있는 경우가 생기면 basename으로 간편하게 해결할 수 있다. 아래의 예시를 보자. # /home/john/Documents/my_doc.txt에서 파일명만 추출 basename "/home/john/Documents/my_doc.txt" my_doc.txt 만약 파일명 맨 뒤에 있는 확장자를 제거하고 싶다면 -s 옵션을 추가해 주자. # .txt 확장자 제거 basename -s ".txt" "/home/john/Documents/my_doc.txt" my_doc 여러개의 인자를 사용하고 싶다면 -a 옵션을 사용하면 된다. basename -a "/home/john/Docum

[bash: awk] awk에서 문자열을 분할하여 배열(array)에 저장하기 (split)

반달가면|2017년 3월 9일

awk에서 문자열 작업을 할 때, 한 행의 문자열을 분할해서 배열에 저장할 수 있다. 예를 들어 한 문장이 있을 때 단어별로 쪼개서 배열의 원소로 저장하는 경우다. awk에서 제공하는 split 함수를 이용하면 된다. split 함수의 형식은 아래와 같다. split(문자열, 배열 이름, 구분자) 예를 들어 입력 받은 행($0)을 콜론(:) 기준으로 분할해서 배열 arr에 저장하고자 한다면 아래와 같이 된다. split($0, arr, ":") 배열의 원소번호(index)는 1부터 시작한다. 위의 예시에서 첫번째 원소가 arr[1]에 있다. 아래의 예시를 보자. # 문자열을 콜론을 기준으로 분할, 배열 arr에 저장한 후 세번째 원소만 출력 echo "a:b:c:d:e" | aw

[bash: awk] 현재 행에서 특정 문자열이 존재할 때 바로 이전 행을 출력하기

반달가면|2017년 2월 27일

텍스트 파일에서 특정 문자열을 검색해야 하는데, 해당 문자열이 출현했을 경우 바로 이전 행만 출력해야 할 경우에 awk를 이용해서 가능하다. 조건문을 사용해야 하므로 좀 복잡하긴 하지만, 어쨌든 가능. 개인적으로 이 문제에 대한 고민은 여러 행으로 이루어진 텍스트 파일에서 특정 부분을 따옴표(")로 묶어주어야 하는 문제 때문에 시작되었다. 어떤 형태의 문제였는지 예를 들자면 아래와 같다. john과 jane의 대화를 기록한 my_dialog.txt 파일의 내용이 아래와 같은 상황이다. # 파일 내용 확인 cat my_dialog.txt john: hello, jane. how are you? jane: not bad, john. thanks 위의 내용을 아래와 같이 바