기타/Shell script, bash: 19개의 글
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/NHYvg/btq3TyANGfM/uF3ZLxAQ448E00s6mRbzWK/img.png)
쉘(shell)에서 특정 컬럼 더하기 데이터 분석을 하다 보면 특정 컬럼의 값을 더할 때가 있다. 예를 들어서 positive/negative의 비율(ratio)을 확인할 때, label의 값이 0 또는 1의 값이면, 1의 값을 모두 더하면 positive의 개수를 알 수 있다. 전체 positive의 개수를 확인하고, 파일의 line수를 계산하면 쉽게 알 수 있다. shell $ cat data | wc -l 데이터 1 2 3 4 5 6 7 8 9 명령어 shell $ cat data | awk '{sum+=$2 ; print $0} END{print "sum=",sum}' 출력 결과 1 2 3 4 5 6 7 8 9 sum= 15 출처 : ourcstory.tistory.com/372?category=..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/lB2uT/btq3YLSlmBd/1pf3KS9TkdDoxoSFXlvjFK/img.png)
command to split the file into multiple files 한개의 파일을 여러 파일로 분할하는 방법 데이터의 사이즈가 너무 크게 되면 메모리에 올릴 수 없다. 파일 하나를 shuf하거나 다른 작업을 할때, 메모리가 넘칠 수 있다. 하나의 파일을 여러개의 파일로 분할하자 파일의 개수와, 행의 개수를 지정 한다. 코드 awk -F'|' -v fileformat="/abc/output/file_%04d.txt" -v max=3 -v field=5 ' NR == 1 {header = $0; next} ! ($field in seen) { seen[$field] if (++n % max == 1) { close(out) out = sprintf(fileformat, ++f) print he..
쉘(shell) 스크립트에서 에러가 발생하면 메시지 보내는 방법 들어가며 쉘에서 스크립트 실행을 한 이후에 에러까 발생하면 메시지를 보내자 기존에 있는 메신저앱 텔레그램(telegram)을 이용하자 쉘 스크립트 어디에도 마지막에 한줄 추가로 가능 function sendmsg() { python telegram.py $1 } python app.py || {sendmsg "fail"; exit 1;} 출처 : ourcstory.tistory.com/331?category=716432
쉘(shell)에서 날짜(date) 반복 하는 방법 요구사항 월별, 일별 데이터를 읽어야 한다. 반복문을 이용해 반복적으로 날짜를 읽어야 한다. 날짜의 시작과 끝을 설정해야 한다. bash에서 제공하는 date를 이용해서 여러가지 포맷으로 출력한다. date의 연산(+, -)가 가능해야 한다. #!/bin/bash now=`date +"%Y-%m-%d" -d "05/06/2012"` end=`date +"%Y-%m-%d" -d "05/23/2012"` while [ "$now" != "$end" ] ; do now=`date +"%Y-%m-%d" -d "$now + 1 day"`; echo $now done 출처 : ourcstory.tistory.com/326?category=716432
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/DtHZl/btq0Q8xsbR0/ErpuAY6UTrFPkMXGsv6H4k/img.png)
참조문서 : https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/ 1. 출력 echo : 자동 줄바꿈 printf : c언어랑 비슷 2. 주석 #!/usr/bin/env bash # 3. 함수 function 을 써도되고 생략해도 된다. 함수선언이 호출 뒤에있으면 에러가 발생한다. (command not found) 에러가 나도 밑에꺼는 마저 실행되는 듯 인자 넘기기 : 함수 인자1 인자2 ... 4. 변수 변수 할당은 = 앞뒤에 공백이 없어야만 된다. (있으면 command not found 발생) 홀따옴표, 쌍따옴표 다 되는 듯 선언된 변수는 기본적으로 전역변수이다. 해당 스크립트에서만 유효하다. 다른 스크립트(A.sh 내부에서 B.sh 를 호출하는 상황) 에..
NULL 체크하기 if [ -z [비교할값] ] then echo "NULL" else echo "NOT NULL" fi 조건 체크하기 if [ [비교할 조건] ] then echo "TRUE" else echo "FALSE" fi 출처 : know-one-by-one.tistory.com/70
함수 선언하기 function print(){ local [지역변수명]=$[매개변수순번] local [지역변수명]=$[매개변수순번] echo "v1 - $[지역변수명]" echo "v2 - $[지역변수명]" } 함수 호출하기 print [매개변수값1] [매개변수값2] ... 출처 : know-one-by-one.tistory.com/69
for 문 for [변수이름] in [값1] [값2] [값3] ... do echo "$[변수이름]" done
정규표현식으로 검색하기 # sed -n "/[정규표현식]/p" [파일경로] 정규표현식으로 찾아바꾸기 # sed -i "s/[정규표현식]/[바꿀문자열]/" [파일경로] 정규표현식으로 검색 후, 내용이 있는지 없는지에 따라서 나누어 처리하기 1) terminal 용 # if [ -z $(sed -n "/[정규표현식]/p" [파일경로]) ]; then echo "발견"; else echo "해당사항없음"; fi 2) sh 파일 작성용 if [ -z $(sed -n "/[정규표현식]/p" [파일경로]) ] then echo "발견" else echo "해당사항없음" fi 출처 : know-one-by-one.tistory.com/67