처음으로 지인의 부탁을 받아 shell 스크립트를 짜 보았습니다.

csh로 짰는데, 생각보다 자료가 적어서 크게 당황하였고, 대부분의 자료는 영어였으며, 프로그래밍의 다양성을 존중하는 언어인지 같은 상황에 대해 10가지 문서에서 10가지 다른 프로그래밍 방식을 사용하더군요.

그리고 기본적인 내용을 한번 정리해 보기로 하였습니다.

전에도 한번 했었는데, 워낙 생소한 분야라 한번 익숙해졌다가도 다시 초기화되어 저도 기록을 남깁니다.

작성해본 스크립트는 씨 쉘(csh) 기준입니다.

  • csh, bash 차이에 따라서 프로그래밍 언어도 차이가 있는 것 같습니다.

0) 셸 스크립트 작성 및 실행법

파일 최상단에

#!/bin/csh
#
# comment

입력 후 하단에 쉘 스크립트를 작성해주시면 됩니다.
파일명의 확장자는 .csh이며, mac에서 사용시 그냥 터미널에서 csh 명령어 이후에 파일이름을 써주시면 스크립트 파일이 실행됩니다.
여기서 최상단 문장을 제외한 #으로 시작하는 문장은 전부 주석입니다.

1) 기본적인 변수선언 및 변수 사용

set var = "Hello"

echo $var

2) 쉘스크립트 실행 후 결과값을 변수에 저장

set ls = `ls`

echo $ls

여기서 ` 부분은 작은 따옴표가 아니라 그레이브 혹은 백틱 이라는 탭 키 위에 있는 문자입니다.
이 그레이브로 쌓인 문장은 쉘에서 실행된 뒤 그 결과를 반환하는 약간의 '부분실행' 명령어 같은 것입니다.
여기서는 배쉬(bash) 명령어인 ls로 현재 디렉토리의 파일 리스트를 읽어온 뒤 그것을 다시 ls라는 변수에 저장하였습니다.

3) 파이프 명령어(pipe operation, |)

|는 엔터 근처에 있는 \표시 혹은 백슬래시기호를 시프트 키를 누른 채 누르면 써지는 파이프 기호입니다.
csh에서 이 파이프 기호는 왼쪽 명령의 결과를 오른쪽 명령의 인풋으로 사용한다는 뜻입니다.

4) 파일 출력 명령어 >

> 는 파일을 출력하라는 명령어이며, 왼쪽의 결과를 오른쪽에 쓰는 파일 이름으로 저장합니다,
예를 들어
echo "Hi" > hi.txt
라고하면 hi.txt라는 파일에 Hi가 입력된 채로 파일이 생성됩니다.

5) foreach

사실 요새는 for 보다는 foreach 같이 내부 요소를 순환하는 명령이 사용하기 더 편합니다. (직접적으로 수의 증감이 필요한 경우 제외하고)
csh에서 foreach명령문의 형태는 아래와 같습니다.

foreach var1 ( $var2 )

    echo $var1

end

즉, var2에 저장된 요소들을 하나씩 var1에 저장하며 for문을 도는 것입니다.
여기서는 단순히 출력만을 합니다.
조금 더 활용하면

foreach var1 ( `명령` )

    echo $var1

end

와 같이 활용할 수도 있습니다. 직접적으로 명령을 입력해서 그 출력을 foreach의 순회 요소로 만드는 것이지요.

6) if

if (조건문) then

    실행문

endif

if는 위와 같은 구조로 구성됩니다.
여기서 조건문의 or와 and는 c와 같은 ||, && 연산자로 처리할 수 있습니다.
또한 같다 다르다의 명령 또한 c와 같은 ==, !=입니다.
추가적으로 텍스트 비교를 위해서는 단순히 $text1 == $text2라고 하면 "if: Expression syntax"에러를 내기 때문에 `echo $text1 ` == `echo $text2`의 변형기출이 필요합니다.

7) 파일 경로 조작

전체 파일 경로에서, 끝에 :t를 붙이면 확장자를 포함한 파일 명만 나오고, :r을 추가로 붙이면 확장자를 제외한 파일 명을 리턴해줍니다.
즉, "/dir1/test.txt":t:r을 써주시면 test만 출력됩니다.
더욱 자세한 정보는 이곳을 클릭해주세요.

8) awk

사실 awk만으로도 단순 쉘 스크립트 뿐만이 아닌 거의 독자적인 문서 리딩 명령이라고 할 수 있습니다.
그래서 awk를 사용하기 위해서도 복잡한데 기본적인 것들만 정리해보도록 하겠습니다.
기본적으로 awk는 문서를 순차적으로 한줄씩 읽어내려간다고 생각하시면 됩니다.
awk의 기본 형태는
awk '조건 및 실행문' 입력파일
입니다.
입력파일
이 부분에서 파일 입력을 받아서 조건 및 실행문에서 조건에 맞게 무언가를 실행하고 그것을 출력하는 함수입니다.
여기서 cat 입력파일 | awk '조건 및 실행문'으로 입력해도 됩니다. (cat은 단순히 입력파일의 내용을 보여주는 함수입니다.)
'조건 및 실행문'
이 안에서 awk에서 제공하는 조건문은 그냥 작성 됩니다. (같다/다르다 ==/!= 명령, or/and명령 ||/&& 사용가능)
그리고 built-in variables라고, 내장 변수와 함수들이 존재합니다.
$0 : 전체 라인
$1 : 첫번째 열
$2 .. $n : n번째 열
NR : 행 번호(가령 첫번째 행은 1)
length(변수) : 변수의 길이
이외에도 더 있지만, 가장 자주 쓰는 내장 변수들은 이정도입니다. 더 궁금하시면 구글링 해보시면 됩니다.
또한 정규표현식(regex)도 사용할 수 있습니다.
/정규표현식/로 사용이 가능하며, 시작 끝표현인 ^ $ 등 정규표현식에서 사용하는 방식은 전부 사용됩니다.
기본적으로 아무것도 써주지 않고 조건만 써주면 현재 라인 전체에서 찾습니다.
정규표현식에서 built-in variables를 사용하기 위해선 ~ 명령어로 '이 안에서 찾아라'라는 것을 명시해 주어야 합니다.
가령
/hello/, $0 == "hello", $0~/hello/
위의 세 명령어는 전부 같은 조건입니다.
NR==1, NR==5를 조건으로 입력하면 첫번째 행부터 5번째 행까지 출력합니다.
단순히 NR<6으로 작성할 수도 있습니다.
기본적으로 awk에서 조건에 맞는 결과는 바로 리턴해줍니다. 그러나 awk내에서 csh과 같은 프로그래밍 문법을 사용하려면 대괄호(brace, {})안에 작성하여야 합니다.
기본적으로 if (), print, printf, substr(), length(), for(;;)등 사용 가능합니다.
예시로
awk '$1=="test" {printf "%s %s",$3,substr($4,1,length($4)-1)}' test.txt
같이 사용하며
print안에서 연속해서 변수를 출력할경우 print $1,$2와 같이 콤마로 연결하여 쓰며, 여러 명령어를 동시에 사용할 땐 print $1 print $2와 같이 공백으로 연결해줍니다. 혹은 명시적으로 세미콜론으로 구분지어주기도 합니다.
print명령의 경우 뒤에 아무 것도 쓰지 않으면 전체 줄 출력, print $1과 같이 변수 입력하면 해당 변수 출력합니다.

8-1) awk 심화(문서 조건)

awk의 조건명령문 안에서 대괄호는 세미콜론으로 연결됩니다.
또한 BEGIN, END등의 명령으로 문서의 시작점과 끝점에서 특정하게 실행시킬 명령문을 지정할 수 있습니다.
awk 'BEGIN {print};END {print}' test.txt 명령은 처음 한줄과 끝 한줄만을 출력합니다.

8-2) awk 심화(변수 passing)

awk를 사용하다보면, csh의 변수를 awk에서 사용해야 할 때도 있고, 반대로 awk의 결과를 변수로 저장해야 할 경우도 있습니다.
사실 이 경우가 정말 검색에서 잘 안나오는데, 하나하나 설명드리겠습니다.

1) csh변수 -> awk변수

-v

가장 흔히 쓰는 방식은 -v 명령을 통하여 변수를 링크시키는 것입니다.
예를 들면 awk -v var=$ex_var 'print var'라는 명령에서 csh의 ex_var라는 변수를 awk 내부의 var라는 변수로 대입시켜 print하는 명령입니다.

'"${}"'

awk내에서 '"${변수이름}"'식으로 shell variable을 awk내에서 사용 가능합니다.
2) awk변수 -> csh변수
이게 진짜 아무데도 안나오고, csh에 맞게 설명되어있는 부분이 없습니다.
인터넷에 declare, source, eval 이런 명령어들을 사용하는데, 정말 단순합니다.

set var = `awk '{print}' test.txt`

echo $var
var = $(awk 'NR>5 {print}' test.txt)

echo $var

이렇게 하면, test.txt에 쓰여져 있는 것들이 print로 출력되며, 이 결과가 var라는 csh변수에 저장되고, 이것을 echo가 출력하게 됩니다.

9) 기타 shell script 명령어들

1) for

for i in {start..end...step}
do
    내용
done

2) foreach

foreach i ( 1 2 3 4 5 )
    내용
end

3) if

if (condition) then
endif
if [condition] then
elif [condition] then
else
fi

만약 더 사용하게되며 추가적으로 알게되는 내용은 실시간으로 업데이트 예정입니다.

'Software > Shell script' 카테고리의 다른 글

[csh] data extractor  (0) 2020.01.19
#!/bin/csh
#
# data extractor
#

set lat = "60 22.77700N"
set lon = "42 54.63700W"

foreach file ( `ls` )
   echo $file
   set clat = `awk '$1=="Latitude" {printf "%s %s",$3,substr($4,1,length($4)-1)}' $file`
   set clon = `awk '$1=="Longitude" {printf "%s %s",$3,substr($4,1,length($4)-1)}' $file`
   # set clat = `cat $file | awk '$1=="Latitude" {printf "%s %s",$3,substr($4,1,length($4)-1)}'`
   # set clon = `cat $file | awk '$1=="Longitude" {printf "%s %s",$3,substr($4,1,length($4)-1)}'`
   if (`echo $lat` == `echo $clat` && `echo $lon` == `echo $clon`) then
      set sl = `cat $file | awk '{if (NR>40 && $1=="//") print NR}'`
      # set sl = `cat $file | awk '{if (NR>40 && $1~/\/\//) print NR}'`
      awk -v sl=$sl 'NR>sl {print}' $file > $file:t:r_ext.txt
      # cat $file | awk -v sl=$sl 'NR>sl {print}' > $file:t:r_ext.txt
   endif
end

'Software > Shell script' 카테고리의 다른 글

[Linux/shell/bash/csh] shell 스크립트 튜토리얼  (0) 2020.01.20

[AWS/Ubuntu/Linux/Anaconda/Selenium] aws에서 작동하는 selenium 패키지를 활용한 python 실행 파일 만들기

 

aws에서 selenium 패키지를 활용하여 웹 크롤링 혹은 스크래핑을 진행하는 데 있어 정말 여러가지 오류들이 있어서, 이참에 아예 한번 싹 정리해봅니다.

 

아예 완전히 aws 인스턴스를 처음 만들었다고 가정합니다.

관련 페이지: https://omnil.tistory.com/67, https://omnil.tistory.com/144

 

1. 아나콘다 다운로드 및 설치

- 관련페이지의 설명과 같이 Anaconda3-2019.10-Linux-x86_64.sh 이 부분만 원하는 버전으로 바꿔주시면 됩니다.

wget https://repo.continuum.io/archive/Anaconda3-2019.10-Linux-x86_64.sh && sh Anaconda3-2019.10-Linux-x86_64.sh

 

2. 배쉬 리프레시 및 설치파일 제거

source ~/.bashrc && rm Anaconda3-2019.10-Linux-x86_64.sh

 

3. 새 폴더 생성 및 이동

mkdir sandbox && cd sandbox

 

4. unzip과 chromium-browser설치

sudo apt update && sudo apt install unzip && sudo apt-get install -y chromium-browser

 

5. chromium-browser version확인

- 여기서 확인한 버전으로 크롬드라이버를 깔아주어야 합니다.

chromium-browser --version

 

6. (위에서 확인한 버전에 맞는) 크롬드라이버 다운로드, unzip, chromedriver 실행권한 변경 및 기본 path로 이동

- 위에서 확인한 버전에 맞는 크롬드라이버 다운로드 링크는 >>여기<<서 확인하실 수 있습니다.
wget https://chromedriver.storage.googleapis.com/79.0.3945.36/chromedriver_linux64.zip

unzip chromedriver_linux64.zip && chmod +x chromedriver && sudo mv chromedriver /usr/bin/chromedriver && rm chromedriver_linux64.zip

 

7. 크롬드라이버 버전 확인

- chromium-browser --version과 동일해야 합니다.

chromedriver --version

 

8. 파이썬 파일에서 사용할 패키지 설치

pip install selenium telepot

 

9. 스크린 작동

- 스크린에 관련하여서는 >>페이지<< 하단에 자세하게 나와있습니다.
screen -S noti

 

10. 파이썬 파일 실행

- 파이썬 파일 이름은 watch_key.py입니다.

python watch_key.py

 

11. 파이썬 파일 내부에서 selenium을 사용할 경우에는 반드시 아래와 같은 옵션을 주고 드라이버를 실행하여야 합니다.

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(options=chrome_options)

'Software > AWS' 카테고리의 다른 글

[AWS/Linux] wget으로 아나콘다 깔기  (0) 2019.09.20

[python/jupyter/notebook] 주피터 노트북으로 발표하기!

 

주피터 노트북으로 발표할 수 있는 방법은

1] nbviewer

  장점: 온라인으로 바로 보여줄 수 있음, 공유가 쉬움

  단점: 매 강의자료마다 gist로 publish해주어야함, 강의자료 공개, 인터넷 환경 필수

2] nbconvert

  장점: 다른 어떤 조작도 필요없이 커맨드 명령어 만으로 바로 강의자료를 만들어줌

  단점: 컨버팅에 인터넷 환경 필수, 각 강의자료마다 하나하나 변환해주어야 함

3] RISE

  장점: 인터넷 필요 없음, 주피터 노트북만 떠 있다면 바로 주피터를 슬라이드 쇼로 변환가능, 쇼 중간에 셀 실행 가능

  단점: 처음 설치가 까다로움

의 세가지가 있습니다.

그리고 그 전에 각 셀마다 슬라이드 타입을 설정해 주어야 합니다.

 

0] 슬라이드 타입 설정

1) 메뉴바 -> View -> Cell Toolbar -> Slideshow를 클릭

2) 그러면 각 셀 위에 오른쪽에 dropdown메뉴로 slide 타입을 설정할 수 있는 메뉴가 생성

3) 각 셀마다 슬라이드 쇼에서 어떻게 나타낼지를 결정해주면 된다.

  slide : 한 화면에 나올 slide

  sub-slide : 한 화면에 나오는 slide지만 위의 slide에 종속되어 있는 슬라이드. 아래화살표 버튼을 누르면 보여줄 수도 있지만, 바로 슬라이드를 넘김(>)으로 생략할 수도 있다.

  fragment : 한 슬라이드내에서 '나타나기'로 나타나는 조각을 만든다.

  skip : 노트북에서는 보이지만 슬라이드 화면에서 보이지 않는 셀로 만든다.

  notes : 발표시에 참고가능한 노트로 만든다.

4) 저장한다.

 

1] nbviewer

1) 주피터 노트북 파일(.ipynb)로 저장된 파일을 메모장으로 열어준다.

2) 나오는 코드를 그대로 전체 복사

3) gist.github.com에 접속

4) 새 글쓰기를 해서 관련 내용을 붙여넣은 뒤 'create public gist'를 눌러 새 글을 만든다.

5) 새 글이 써진 뒤 url에서 자기 아이디 뒤의 해시코드를 복사한다.

6) https://nbviewer.jupyter.org/에 접속한다.

7) 복사한 해시코드를 입력창에 붙여넣고 Go!를 누른다.

8) 발표자료가 바로 실행된다.

 

2] nbconvert

1) jupyter nbconvert <주피터파일>.ipynb --to slides --post serve 명령어를 터미널에서 입력한다.

2) 이 과정은 인터넷이 필요한 과정이다.

3) 만들어진 .html파일은 인터넷이 없어도 사용할 수 있다.

 

3] RISE

1) pip3 install jupyter_contrib_extensions

(or conda install -c conda-forge jupyter_contrib_nbextensions)

2) jupyter contrib nbextension install --user

3) pip3 install rise

(or conda install -c damianavila82 rise)

 * 혹은 jupyter-nbextension install rise --py --sys-prefix 도 가능

 * 만약 permission denied에러가 난다면 --sys-prefix옵션을 빼고 실행하면 된다.

4) jupyter nbextension enable rise --py --sys-prefix

 * 만약 permission denied에러가 난다면 --sys-prefix옵션을 빼고 실행하면 된다.

5) 메뉴바 아래 아이콘 버튼 중 맨 오른쪽에 차트모양의 'enter/exit RISE Slideshow'가 뜨면 성공! 이제 이 버튼으로 슬라이드쇼를 시작할 수 있다.

6) 단축키는 alt+r

[AWS/Linux] wget으로 아나콘다 깔기

1) https://repo.continuum.io/archive/ 에 접속한다

2) 원하는 아나콘다 버전을 찾는다.

3) 링크에서 오른쪽 클릭하여 "링크 주소 복사"를 누른다.

4) 명령 프롬프트에 $ wget [복사한 링크 주소]를 입력한다.

5) 다운 완료!

가장 흔하게 쓰는 프로그래밍 케이스(case) 타입

 

프로그래밍을 하다보면 정말 흔하게 카멜케이스니 스네이크케이스이니 하는 것들을 들어보게 된다.

 

블로그의 취지에 맞게 딱 맞게 한줄로 정리해본다.

 

Camel case(카멜 케이스) : testVariableOne

  기본적으로 두 단어를 합쳤을 때 두번째 단어의 첫 글자만 대문자로 바꾸는 것이 카멜케이스이지만, 세 단어를 합쳤을 때에는 첫번째 단어만 제외하고 나머지 단어들의 첫 글자를 대문자로 바꾸어 주는 것이 카멜케이스.


Snake case(스네이크 케이스) : test_variable_one

  두 단어 이상을 합칠 때 언더바(언더스코어)로 구분해준다.


Kebab case(케밥 케이스) : test-variable-one

  두 단어 이상을 합칠 때 바(대시)로 구분해준다. 꼬치에 꿰인 케밥 고기 모양이라 이 이름이 붙었다.


Pascal case(파스칼 케이스) : TestVariableOne

  카멜케이스와 비슷하지만, 첫 단어의 첫글자 까지 대문자로 바꾸어주는 것이 파스칼 케이스이다.


Upper case (with snake case) : TEST_VARIABLE_ONE

  프로그래밍에서 많이 쓰이는 케이스는 아니지만, 보통 상수 중에서 여러 단어가 합쳐진 경우에는 스네이크 케이스를 사용하여 연결하는 경우가 많다. (대문자를 그냥 다 붙여쓰는 경우는 정말 거의 없는 듯..)

Git bash에서 jupyter notebook사용하기

 

처음에 아나콘다를 깔 때, add system path ~하는, 체크박스가 위 아래 있는 창에서 위쪽 체크 해제된 체크박스를 체크해주면 시스템 패스에 anaconda가 잡히고, 여기서 바로 jupyter notebook을 사용할 수 있다.

 

[체크하면 빨간색 글씨가 되는데, 처음에는 다들 이거보고 무서워서 체크 안하는데 하는게 다른 프로그램에서 아나콘다 사용하기 좋다.]

[OpenCV] OpenCV 설치-3(Visual Studio와 연동)

 

저번까지는 각 프로그램들을 깔고 환경 설정하는 것까지만 하였습니다.

 

이번에는 두 프로그램을 연동해보겠습니다.

(엄밀히 말해서 OpenCV자체는 프로그램이라 보기 힘들지만..)

 

 

1) Visual Studio에서 새로 프로젝트를 하나 만들어줍니다.

2) 왼쪽의 "설치됨" 아래 항목인 "Visual C++" 아래 "Windows 데스크톱"을 선택해주시고 "Windows 데스크톱 마법사"를 선택해 주세요. 

3) 프로젝트 이름은 아무거나 정하셔도 상관없습니다.

4) 이름 정하는 곳 오른쪽 아래 "솔루션용 디렉터리 만들기"라는 체크박스가 있는데 해제해 주세요.

5) 이렇게 하고 확인을 누르면 새로 팝업이 하나 더 뜹니다. 여기서는 "미리 컴파일된 헤더"의 체크박스를 풀고 "빈 프로젝트"의 체크박스를 선택한 뒤 확인을 눌러줍니다.

6) "파일, 편집, 보기, 프로젝트..." 등이 있는 메뉴바 아래에 "x86"이라고 써진 부분을 "x64"로 고쳐줍니다.

7) 메뉴바에서 "프로젝트" -> "속성"을 눌러줍니다.

8) 왼쪽의 디렉터리 리스트에서 "구성 속성" -> "링커" -> "일반"을 선택한 뒤 "추가 라이브러리 디렉터리"항목을 누르면 아래 드롭다운으로 <편집>이라고 나옵니다. 이것을 누른 뒤 위의 창에다가 $(OPENCV_DIR)\x64\vc15\lib 이라고 입력한 뒤 확인을 눌러줍니다.

9) "링커" -> "입력"을 선택한 뒤에 "추가 종속성" 항목에 위와 같은 방법으로 opencv_world410d.lib을 입력합니다.

10) 8)~9)과정을 창 맨 왼쪽 위에 있는 "구성"에서 현재 "활성(Debug)"인 것을 클릭하여 "Release"로 바꾼 뒤 똑같이 진행합니다. 여기서는 "추가 종속성" 항목에 쓰는 내용이 opencv_world410d.lib 대신 opencv_world410.lib입니다.

 

 

이렇게하여 OpenCV와 Visual Studio를 연동하는 것까지 끝났습니다.

 

이후에는 OpenCV로 작성된 코드를 가지고 와서 소스코드로 만든 뒤 디버깅 혹은 실행하면 제대로 작동되는 것을 보실 수 있습니다.

 

 

Reference: OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝

'Software > OpenCV' 카테고리의 다른 글

[OpenCV] 설치하기-2(OpenCV 설치)  (0) 2019.09.04
[OpenCV] 설치하기-1(Visual Studio 2017 설치)  (2) 2019.09.03

[OpenCV] 설치하기-2(OpenCV 설치)

 

저번에는 OpenCV를 돌릴 수 있는 개발환경인 Visual Studio Community 2017를 설치해 보았습니다.

 

이번에는 실제로 OpenCV를 다운로드 받고 개발환경과 연동하는 방법에 대하여 알아보도록 하겠습니다.

 

1) 먼저 https://opencv.org/releases/에 접속하여 OpenCV를 다운로드 받습니다.

저희는 4.1.0버전의 Windows용을 다운받을 것입니다.

 

2) 다운받은 exe파일을 실행하여 압축을 풉니다. 경로는 C:\만 지정하도록 하겠습니다.

 

3) 제어판 -> 시스템 -> 좌측의 "고급 시스템 설정" 클릭 -> 아래쪽의 "환경변수" 클릭 -> 위 아래로 두개가 있는 "새로 만들기" 중 위쪽에 있는 "새로만들기" 클릭 ->

변수이름: OPENCV_DIR

변수 값: C:\opencv\build

입력 후 확인

 

4) "환경 변수" 창에서 "새로 만들기" 위에 리스트에서 "Path"라고 적힌 부분을 찾아서 "편집" 클릭

5) 환경변수 편집 창에서 새로만들기 누른 후

%OPENCV_DIR%\x64\vc15\bin

입력 (만약 윈도우 버전이 낮은 경우 편집을 누르면 한줄로 길게 입력하는 프롬프트가 생성됨. 여기서 뒤에 ;찍고 위의 내용 입력하면 가능)

 

이렇게 하여 OpenCV설치와 환경 변수에 등록하는 것까지 마쳤습니다.

 

다음에는 실제로 Visual Studio와 연동해 보겠습니다.

 

 

Reference: OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝

+ Recent posts