본문 바로가기

나 취준생/리눅스

리눅스로 SQL문 구현하기2

320x100

1. uniq 명령어


중복된 라인을 제거하는 명령어


# uniq 옵션 파일명


예제 : emp.txt에서 직업만 출력하기


awk '{print $3}' emp.txt



예제 : 위 결과에서 abcd 순으로 정렬하기


awk '{print $3}' emp.txt | sort -k 1



저번에는 nrk를 사용했는데

숫자가 아니니 n은 필요없고, 오름차순이라 r도 필요없다.

행은 한 개 밖에 없으니 당연히 1이다.


예제 : 위의 결과에서 중복을 제거해서 출력하기


awk '{print $3}' emp.txt | sort -k 1 | uniq



이런 경우 sort만 사용해도 동일하게 출력되긴 한다.



###중요###

이렇게 중복제거를 할 때 명심할 점은

uniq를 항상 마지막에 사용해야 한다는 점이다.

uniq는 위아래 데이터가 같은 경우에만 '중복'으로 치기 때문에

만약 SALESMAN이 1행, 10행에 있다면 '중복'이 아니다.

그래서 ABC순으로 먼저 정렬을 하게 한 뒤에, 중복 처리를 해줘야 한다.



예제 : 직업이 clerk인 사원들의 부서 번호를 출력하는데 중복을 제거해서 출력하기


awk '$3==toupper("clerk") {print $8}' emp.txt | sort -k 1 | uniq



2. echo 명령어


출력하려 하는 글자를 출력하기 위해 사용하는 명령어

파이썬의 print와 같다.

변수 안의 글자를 출력할 때도 사용



echo ( '출력할 내용' ) -> 그대로 출력

echo ( $변수 ) -> 변수 내용 출력


3. vi 편집기 활용


예제 : 직업을 물어보게 하고, 직업을 입력하면 해당 직업의 사원의 이름과 직업을 출력하는 스크립트 만들기


echo -n 'Enter the job name '

read job

grep -i $job emp.txt | awk '{print $2,$3}' 을 한 번에 해야하는데


위의 리눅스 명령어 여러 개를 파일로 저장해서 한 번에 수행하는 방법은 다음과 같다.


vi 파일 이름.sh -> 입력


vi job2.sh


위를 입력하면, vi 편집기 화면으로 들어가는데,


이 때 알파벳 i를 누르면


아래쪽에 insert 라고 표시된다.




이 때 리눅스 밖에서 3줄의 명령어를 먼저 복사해두고,


shift+insert를 눌러서 붙여넣는다.



복사가 됐으면


esc키를 눌러서 아래쪽에 insert를 사라지게 하고


shift + z 를 두 번 연속으로 누르면 저장된 상태로 빠져나온다.



그러면 

저장해둔 job2.sh를 실행하려면


sh job2.sh


하면 된다.




코드 설명 :


echo -n 'Enter the job name ' 에서

아까 말한 것처럼 Enter the job name 은 그냥 출력될 뿐이다.

-n은 출력된 뒤의 커서가 그 줄에 유지되는거고,

-n을 쓰지 않으면 다음 줄에 넘어가서 입력하게 된다.

없어도 상관없다.


그 다음 내가 입력한 내용은

read job에서

job에 들어간다.


그래서

grep -i $job emp.txt 는

grep -i 'SALESMAN' emp.txt와 같아진다.



예제 : 이름을 입력받고 해당 사원의 이름과 월급을 출력하기


vi ename.sh


echo -n 'Enter the name '

read temp

awk -v ename=$temp '$2==toupper(ename) {print $2,$6}' emp.txt


sh.ename.sh



코드 설명 :


read ename

awk $2==$ename 같은 코드는 오류가 발생한다.

왜냐하면 $가 각각 의미가 다른데

$2 는 2번째 행, $ename은 ename의 값을 의미하는데

같은 식에 있어서 오류가 발생하는 것 같다.


그래서 temp로 데이터를 입력 받고

awk -v 옵션을 통해

ename 변수에 temp 값을 넣고,

$2==ename 으로 해서 검색하게 했다.



4. SQL 문의 조인 구현하기


예제 : SCOTT(EMP.TXT)이 근무하는 부서위치(DEPT.TXT)를 출력하기


SQL > select d.loc

from emp e, dept d

where e.deptno=d.deptno and e.ename='SCOTT';


SQL에서의 조인 문을 리눅스에서 구현해보자.




예제 : SCOTT의 부서 번호를 출력하기


awk '$2==toupper("scott") {print $8}' emp.txt




하면, SCOTT의 부서 번호인 20만 출력된다.


deptno=`awk '$2==toupper("scott") {print $8}' emp.txt`


이 값을 deptno에 저장.

여기서 awk 문의 양끝에 있는건 숫자 1의 옆에 있는 기호이다.

(싱글 쿼테이션 아님!)


awk -v num=$deptno '$1==num {print $3}' dept.txt


그럼 저번에 했던 것처럼

awk에서 -v 를 하면, num에 $변수값을 넣을 수 있는데,

이를 통해서

dept.txt에서

dept 1열의 값이 20인 행을 찾아서 부서 위치인 $3만 출력한다. 





예제 : 이름을 입력받고 그 사원의 부서 위치를 출력하는 스크립트 만들기


vi.find_loc.sh


echo -n "Enter the ename "

read temp

deptno=`awk -v num1=$temp '$2==toupper(num1) {print $8}' emp.txt`

awk -v num=$deptno '$1==num {print $3}' dept.txt


sh.find_loc.sh



반응형

'나 취준생 > 리눅스' 카테고리의 다른 글

리눅스 권한 관리 명령어  (0) 2021.01.05
vi 편집기 명령어  (0) 2021.01.05
리눅스로 SQL SELECT 문 구현하기  (0) 2020.12.30
리눅스 기본 명령어2  (0) 2020.12.29
리눅스 기본 명령어1  (0) 2020.12.29