반달가면

Sources

Posts

427 posts

[bash: sed] 특정한 문자열이 포함된 행 삭제하기

반달가면|2017년 2월 8일

텍스트 파일에서 특정한 문자열이 포함된 행을 삭제하고 싶을 경우, sed에서 간단하게 작업이 가능하다. 삭제하고자 하는 문자열을 "/문자열/d" 형태로 지정해 주면 된다. 아래의 예시를 보자. # my_data.txt 파일에서 "abcdefg"가 포함된 행을 제거하고 화면에 출력 sed '/abcdefg/d' my_data.txt 위의 명령을 실행하면 my_data.txt 파일에서 문자열 "abcdefg"가 있는 행을 제거한 후 화면에 결과를 출력한다. 파일 자체를 수정하여 저장하고 싶다면 -i 옵션을 추가하자. (-i 옵션에 대한 내용은 이전 게시물을 참고하자. 여기로) # my_data.txt 파일에서 "abcdefg"가 포함된 행을 삭제하고 저장 sed -i '/abcdefg/d'

[bash: awk] 일반 시간을 타임스탬프(timestamp)로 변환하기 (mktime)

반달가면|2017년 2월 3일

시간을 타임스탬프, 또는 유닉스 시간(unix time)으로 변환하고 싶을 경우 아래의 예시와 같이 date 명령으로 간편하게 바꿀 수 있다. (참고로, 유닉스 시간은 UTC 1970년 1월 1일 0시부터 몇초가 경과했는지를 나타낸다) # 2017년 1월 1일 9시 10분 25초를 유닉스 시간으로 (date) date -d "2017/1/1 09:10:25" "+%s" 1483229425 awk에서도 동일한 작업을 할 수 있다. # 2017년 1월 1일 9시 10분 25초를 유닉스 시간으로 (awk) echo "2017/1/1 09:10:25" | awk '{ date_arg=gensub("[/:]/," ","g",$0); print mktime(date_arg);}' 14832294

[bash: while, date] 특정 기간 동안의 연속된 날짜 출력하기

반달가면|2017년 1월 24일

예를 들어 2016년 10월 1일부터 2017년 2월 5일까지의 날짜를 연속으로 출력하는 방법이다. 시작 날짜와 종료 날짜의 형태를 년(4자리)월(2자리)일(2자리) 이렇게 정하면(예: 2016년 10월 1일 -> 20161001) 조건문에서 일반 수자처럼 대소 비교를 할 수 있으므로 while 반복문과 date를 조합하여 스크립트를 만들 수 있다. 아래의 예시를 보자. # 시작 날짜 2016년 10월 1일 start_date="20161001" # 종료 날짜 2017년 2월 5일 end_date="20170205" # cur_date 변수 초기값 설정(시작 날짜) cur_date="$start_date" # 종료 날짜까지 반복 while [[ $cur_date -le $end

AMD 라이젠(Ryzen) CPU 출시 일정에 대한 힌트

반달가면|2017년 1월 20일

원문 기사는 여기로 AMD의 젠(Zen) 마이크로아키텍처 기반 차기 x86 CPU인 라이젠(Ryzen)의 출시 일정이 공식적으로 확정된 것은 아닌 듯하나, 올해 2월 27일부터 3월 3일까지 열리는 GDC2017에서 AMD가 발표할 내용에서 힌트가 발견된 모양이다. 발표 제목은 "AMD 라이젠 CPU를 위한 최적화", 내용 요약을 보면 "AMD 게임 엔지니어링 팀이 최근 출시된 AMD 라이젠 CPU를 소개하고, 고급 최적화에 대한 주제들을 논의할 것"이라고 되어 있다. 이 내용이 기사화된 이후에 AMD는 발표 내용 요약에서 "최근 출시된"이라는 어구를 삭제했다고 하는데, 어쨌든 내부적으로 2월 출시를 목표로 하고 있는 듯하다. 그러면 이제 얼마 안 남았구나. 일정에 차질이 생겨 연기된다

[bash: awk] awk에서 영역 구분을 이용한 문자열 재구성 작업 (gensub)

반달가면|2017년 1월 17일

예전에 sed에서 역슬래시-괄호를 이용한 영역 구분 및 문자열 재구성 작업 방법을 정리해 두었는데, 같은 종류의 작업을 awk에서도 할 수 있다. 문자열의 영역을 설정해서 자리를 바꾸거나 내용을 대체하거나 하는 등의 작업이다. 우선 awk에서 제공하는 gensub 함수를 보자. 통상적인 문자열 대체는 sub, gsub 함수를 사용할 수 있지만 영역을 설정하는 것은 gensub 함수를 이용해야 한다. (sub, gsub 함수에 대한 내용은 이전 게시물을 참고하자. 여기로) gensub 함수의 형식은 아래와 같다. gensub(/문자열 또는 정규표현식/, "대체할 문자열", 실행옵션, 대상) "대상" 문자열에서 "/문자열 또는 정규표현식/"을 찾아서 "대체할 문자열"로 바꾼다. 실행 옵션은