반응형
Notice
Recent Posts
Recent Comments
Link
Today
Total
07-05 05:44
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
관리 메뉴

iOS 개발 기록 블로그

linux command : head, tail, grep, awk, sort, uniq, echo 명령어 뿌시기 본문

Linux

linux command : head, tail, grep, awk, sort, uniq, echo 명령어 뿌시기

crazydeer 2021. 11. 11. 23:09
반응형

11. head 명령어

" 문서의 처음 몇줄을 화면에 출력하는 명령어 "

[orcl:~]$ head -[출력 ] [파일명]

)
[orcl:~]$ head -20 winter.txt

 

 

문제 21) 겨울왕국 대본의 100줄까지의 내용을 winter_head.txt라는 이름으로 저장하시오

 

)

[orcl:~]$ head -100 winter.txt >> winter_head.txt
[orcl:~]$ ls

 

결과)

 

 

 

12. tail 명령어

" 문서의 마지막 줄을 화면에 출력하는 명령어 "

)
[orcl:~]$ tail -10 winter.txt

 

-f 옵션 : tail의 중요한 옵션으로 문서의 끝에 추가되는 새로운 내용을 실시간으로 확인할 수 있는 옵션

 

) 오라클 db 올라가거나 내려갈때의 정보를 적는 파일을 tail -f 여시오

1. 디렉토리 이동
[orcl:~]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace


2. 아래 사진에서 1.Linux 오른쪽 클릭해서 세션복제 한다


3. 원래 세션에서
[orcl:trace]$ ls -l alert*


[orcl:trace]$ tail -f alert_orcl.log


4. 새로 창에서
[orcl:~]$ sqlplus / as sysdba
SQL> shutdown immediate


5. 원래 세션을 보면
실시간으로 계속 바뀌는 것을 있다


6. 다시 새로 세션에서
SQL> startup


7. 원래 세션에서
Ctrl + C 종료 시킨다

 

 

) 현재 리눅스 시스템의 i/o 성능을 확인하시오 (윈도우의 작업 관리자와 같은 )

[orcl:~]$ sar 1 100

 

 

새로 세션에서 scott에게 dba 권한을 준다

SQL> grant dba to scott;


Grant succeeded.

 

그리고 세션에서 악성 SQL 열어본다

SQL> select count(*) from sh.sales, sh.sales;

 

그런 다음 원래 세션에 가보면 %user 오른 것을 있다.

 

새로운 세션, 원래 세션 모두 Ctrl + C 모든 작업을 중지시킨다.

 

 

 

문제 22) redirection 이용해서 sar 1 100 명령어의 결과가 sar_0622.txt라는 이름으로 저장되게 하시오

 

)

[orcl:~]$ sar 1 100 >> sar_0622.txt

 

설명)

sar 1 100 : 1 100 조회하라는

 

[orcl:~]$ ls

 

 

백그라운드로 돌리는 방법

[orcl:~]$ sar 1 100 >> sar_0622.txt &
[2] 10074

 

백그라운드로 돌렸던 중지시키는

 

 

 

13. grep 명령어

" 파일 안에 포함된 특정 단어나 구문을 검색하는 명령어 "

)

[orcl:~]$ grep -i 'scott' emp.txt
      7788 SCOTT      ANALYST              7566 19-APR-87           3000         0           20

 

설명)

emp.txt에서 scott이라는 단어가 포함된 라인을 보여달라는


-i 옵션 : 대소문자를 구분하지 않겠다

 

 

 

문제 23) 직업이 salesman 사원들의 모든 행을 출력하시오

 

)

[orcl:~]$ grep -i 'salesman' emp.txt
      7499 ALLEN      SALESMAN              7698 20-FEB-81           1600        300           30
      7521 WARD       SALESMAN              7698 22-FEB-81           1250        500           30
      7654 MARTIN     SALESMAN              7698 28-SEP-81           1250       1400           30
      7844 TURNER     SALESMAN              7698 08-SEP-81           1500         0           30

 

 

 

문제 24) 직업이 salesman 사원들의 이름과 월급을 출력하시오

 

)

[orcl:~]$ grep -i 'salesman' emp.txt | awk '{print $2, $6}'
ALLEN 1600
WARD 1250
MARTIN 1250
TURNER 1500

 

특정 컬럼을 뽑아낼 awk 쓴다.

 

 

 

문제 25) 부서번호가 10 사원들의 이름과 월급을 출력하시오

 

)

[orcl:~]$ grep -iw '10' emp.txt                      
      7782 CLARK      MANAGER              7839 09-JUN-81           2450         0           10
      7839 KING       PRESIDENT                  0 17-NOV-81           5000         0           10
      7934 MILLER     CLERK                    7782 23-JAN-82           1300         0           10


[orcl:~]$ grep -iw '10' emp.txt | awk '{print $2, $6}'
CLARK 2450
KING 5000
MILLER 1300

 

설명)

-w 옵션 : 단어 검색

 

 

 

 

14. awk 명령어

" 특정 단어가 들어가 있는 라인에서 특정 컬럼명을 출력하고자 사용하는 명령어 "

 

)
[orcl:~]$ awk '$3 == "SALESMAN" {print $2, $3}' emp.txt
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
TURNER SALESMAN

 

 

 

문제 26) 월급이 3000 이상인 사원들의 이름과 월급을 출력하시오

 

)

[orcl:~]$ awk '$6>=3000 {print $2, $6}' emp.txt
SCOTT 3000
KING 5000
FORD 3000

 

 

리눅스의 연산자 3가지

1. 산술 연산자 :  +, -, *, /
2. 비교 연산자 : >, <, >=, <=, ==, !=
3. 논리 연산자 : $$, ||, !

 

 

 

문제 27) 직업이 salesman 아닌 사원들의 이름과 직업을 출력하시오

 

)

[orcl:~]$ awk '$3!="SALESMAN" {print $2, $3}' emp.txt
SMITH CLERK
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK

 

대소문자 구별없이 나오게 하는 방법

[orcl:~]$ awk '$3!=toupper("salesmAN") {print $2, $3}' emp.txt

 

 

 

문제 28) 직업이 salesman 사원들의 이름과 월급을 출력하는데 월급이 1500 이상인 사원들만

출력하시오

 

)

[orcl:~]$ awk '$3==toupper("salesmAN") && $6>=1500 {print $2, $6}' emp.txt
ALLEN 1600
TURNER 1500

 

 

 

문제 29) 이름이 A 시작하는 사원들의 이름과 월급을 출력하시오

 

힌트)

grep과 정규식(시작: ^, : $) 사용
awkgrep | 활용해서 출력

 

)

[orcl:~]$ awk '{print $2, $6}' emp.txt | grep -i '^A'
ALLEN 1600
ADAMS 1100

 

 

 

문제 30) 81년도에 입사한 사원들의 이름과 입사일을 출력하시오

 

)

[orcl:~]$ awk '{print $2, $5}' emp.txt | grep -i '81'

 

결과)

ALLEN 20-FEB-81
WARD 22-FEB-81
JONES 02-APR-81
MARTIN 28-SEP-81
BLAKE 01-MAY-81
CLARK 09-JUN-81
KING 17-NOV-81
TURNER 08-SEP-81
JAMES 03-DEC-81
FORD 03-DEC-81

 

 

 

문제 31) 81년도에 입사하지 않은 사원들의 이름과 입사일을 출력하시오

 

)

[orcl:~]$ awk '{print $2, $5}' emp.txt | grep -iv '81'
=
[orcl:~]$ awk '{print $2, $5}' emp.txt | grep -v 81

 

결과)

SMITH 17-DEC-80
SCOTT 19-APR-87
ADAMS 23-MAY-87
MILLER 23-JAN-82

 

설명)

-v 옵션 : 포함되지 않은 것을 검색할 사용

 

 

 

문제 32) 겨울왕국 대본에서 elsa 포함되어져 있는 라인들의 개수가 전체 개인지 출력하시오

 

)

[orcl:~]$ grep -iw 'elsa' winter.txt | wc -l
318

 

설명)

grep의 옵션

-c : 패턴이 일치하는 행의 수를 출력한다.

-i : 비교시 대소문자를 구별하지 않는다.
-v : 지정한 패턴과 일치하지 않는 행만 출력한다.
-n : 행의 번호를 함께 출력한다.
-l : 패턴이 포함된 파일의 이름을 출력한다.
-w : 패턴이 전체 단어와 일치하는 행만 출력한다.

 

 

 

문제 33) R에서 elsa 포함되어져 있는 라인의 개수를 출력하시오

 

)

cafe.daum.net/oracleoracle 카페/생각해야할문제 안에

 

 

 

R 쳐도 R 실행될 있도록 설정하는 방법

[orcl:~]$ cd R-3.2.3
[orcl:R-3.2.3]$ cd bin/

 

어떤 거라도 bin 디렉토리가 있는데 bin 디렉토리에 실행프로그램이 있다

[orcl:bin]$ ./R

 

위와 같이 하면 번거롭기 때문에

먼저 /home/oracle/R-3.2.3/ 복사해준다.

 

그리고 다시 cd 되돌아간다

[orcl:bin]$ cd
[orcl:~]$ pwd

 

[orcl:~]$ vi .bash_profile

vi : 파일을 여는 명령어

.bash_profile : oracle 유저로 접속했을때 자동으로 실행되는 파일

 

위와 같이 뜬다.

위에서 export x 커서를 두고 ESC 키를 누르고 알파벳 o 누르면 아래에 있게 공간이 생긴다

 

거기 export PATH=/home/oracle/R-3.2.3/bin:$PATH를 써준다

 

그리고 ESC 눌러주고 :wq! 입력하고 엔터

 

다음 배쉬파일을 실행한다

[orcl:~]$ . .bash_profile
[orcl:~]$ R

 

 

 

15. sort 명령어

" 데이터를 특정 컬럼을 기준으로 정렬하는 명령어 "

 

)

[orcl:~]$ sort -k 6 emp.txt

 

결과)

      7369 SMITH      CLERK              7902 17-DEC-80            800                0           20
      7900 JAMES      CLERK              7698 03-DEC-81            950         0           30
      7876 ADAMS      CLERK              7788 23-MAY-87           1100         0           20
      7521 WARD       SALESMAN              7698 22-FEB-81           1250        500           30
      7654 MARTIN     SALESMAN              7698 28-SEP-81           1250       1400           30
      7934 MILLER     CLERK              7782 23-JAN-82           1300         0           10
      7844 TURNER     SALESMAN              7698 08-SEP-81           1500         0           30
      7499 ALLEN      SALESMAN              7698 20-FEB-81           1600        300           30
      7782 CLARK      MANAGER              7839 09-JUN-81           2450         0           10
      7698 BLAKE      MANAGER              7839 01-MAY-81           2850         0           30
      7566 JONES      MANAGER              7839 02-APR-81           2975            0           20
      7788 SCOTT      ANALYST              7566 19-APR-87           3000         0           20
      7902 FORD       ANALYST              7566 03-DEC-81           3000         0           20
      7839 KING       PRESIDENT          0 17-NOV-81           5000         0           10

 

 

 

문제 34) 위의 결과를 다시 출력하는데 이름과 월급만 나오게 하시오

 

)

[orcl:~]$ sort -k 6 emp.txt | awk '{print $2, $6}'

 

 

 

문제 35) 이름과 월급을 출력하는데 월급이 높은 것부터 출력되게 하시오

 

)

[orcl:~]$ sort -rk 6 emp.txt | awk '{print $2, $6}'

 

결과)

KING 5000
FORD 3000
SCOTT 3000
JONES 2975
BLAKE 2850
CLARK 2450
ALLEN 1600
TURNER 1500
MILLER 1300
MARTIN 1250
WARD 1250
ADAMS 1100
JAMES 950
SMITH 800

 

 

 

문제 36) 직업이 salesman 사원들의 이름과 월급을 출력하는데 월급이 높은 것부터 출력하시오

 

)

[orcl:~]$ sort -rk 6 emp.txt | awk '$3 == toupper("salesman") {print $2, $6}'

 

결과)

ALLEN 1600
TURNER 1500
MARTIN 1250
WARD 1250

 

 

 

문제 37) 사원 테이블의 월급의 토탈 값을 출력하시오

 

)

[orcl:~]$ awk '{print $6}' emp.txt | awk '{sum += $1} END {print sum}'
29025

 

설명)

sum += $1 sum = sum + $1 같다

 

 

 

문제 38) 직업이 SALESMAN 사원들의 토탈 월급을 구하시오

 

)

[orcl:~]$ awk '$3 == toupper("salesman") {print $3, $6}' emp.txt | awk '{sum += $2} END {print sum}'

 

 

 

문제 39) 아래와 같이 결과가 출력되게 하시오

 

보기)

KING 월급은 5000
ALLEN 월급은 3000
.
.
.

 

)

[orcl:~]$ awk '{print $2 " 월급은 " $6 "입니다"}' emp.txt

 

 

 

문제 40) 아래와 같이 결과를 출력하시오

 

보기)

SMITH의 직업은 CLERK입니다
ALLEN의 직업은 SALESMAN입니다
WARD의 직업은 SALESMAN입니다
JONES의 직업은 MANAGER입니다
.
.

 

)

[orcl:~]$ awk '{print $2 " 직업은 " $3 "입니다"}' emp.txt

 

 

 

문제 41) /home/oracle 에서 ls -lrt라고 조회한 결과를 분석하시오

 

결과)

 

설명)

- l : 리스트
- r : reverse
- t : 시간
파일 리스트를 보여주는데 오래된 것부터 보여달라


-rw-r--r--  1 oracle oinstall     1940 Jun 22 11:42 emp50.txt
-rw-r--r-- : 권한
1: 링크
oracle : 소유자
oinstall : 그룹
1940 : 파일크기
Jun 22 11:42 : 최종 변경시간
emp50.txt : 파일명

 

 

 

문제 42) ls -lrt *.txt 했을 파일 크기에 해당하는 부분만 출력하시오

 

결과)

105
970

970
0
0
0
0
426
1940
114548
3387
9134

 

)

[orcl:~]$ ls -lrt *.txt | awk '{print $5}'

 

 

 

문제 43) 42번의 결과를 sum해서 출력하시오

 

)

[orcl:~]$ ls -lrt *.txt | awk '{sum += $5} END {print sum}'

 

결과)

131480

 

 

 

문제 44) 아래와 같이 결과가 출력되게 하시오

 

보기)

현재 디렉토리에 있는 txt 파일들의 크기는 131480 바이트 입니다.

 

)

[orcl:~]$ ls -lrt *.txt | awk '{sum += $5} END {print "the size of the total file under the current directory is " sum " byte"}'

 

 

 

문제 45) 위의 스크립트를 스크립트로 저장해서 실행되게 하시오

 

)

vi size.sh 치면 편집기가 뜬다.
거기서 a 누르고 44번의 답을 붙여넣고 ESC 여러 누른 다음
: 누르고 wq! 친다
그리고 sh size.sh 치고 엔터!

 

결과)

[orcl:~]$ sh size.sh
the size of the total file under the current directory is 131480 bytes.

 

 

 

 

16. uniq 명령어

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

 

문제 46) emp.txt에서 직업만 출력하시오

 

)

[orcl:~]$ awk '{print $3}' emp.txt

 

결과)

CLERK
SALESMAN
SALESMAN
.
.

 

 

 

문제 47) 위의 결과를 abcd 순으로 정렬해서 출력하시오

 

)

[orcl:~]$ awk '{print $3}' emp.txt | sort

 

 

 

문제 48) 위의 결과를 중복 제거해서 출력하시오

 

)

[orcl:~]$ awk '{print $3}' emp.txt | sort | uniq

 

 

 

문제 49) 부서번호를 출력하는데 중복 제거해서 출력하시오

 

)

[orcl:~]$ awk '{print $8}' emp.txt | sort | uniq

 

 

 

문제 50) emp.txt 복사해서 emp7.txt 생성하고 emp7.txt KING 대한 데이터를 복사해서

아래에 하나를 입력하고 저장하시오

 

)

[orcl:~]$ cp emp.txt emp7.txt
[orcl:~]$ cat emp7.txt


[orcl:~]$ vi emp7.txt
King 커서를 두고 yy 누른다 (복사) 다음 커서를 복사하고 싶은 곳에 두고 (제일 아래) p 누른 다음 ESC 여러 누르고 :wq! 치고 vi 편집기를 나온다

 

설명)

vi 편집기에서 dd : 제거, yy : 복사, p : 붙여넣기, u : 실행취소

 

 

문제 51) emp7.txt에서 중복된 라인만 출력하시오

 

결과)

7839 KING       PRESIDENT          0 17-NOV-81           5000         0           10

 

)

[orcl:~]$ sort emp7.txt | uniq -d

 

 

 

문제 52) emp7.txt에서 중복된 라인을 제거하고 출력하시오

 

결과)

 

)

[orcl:~]$ sort emp7.txt | uniq -u

 

 

 

17. echo 명령어

" 출력하고자 하는 글자를 출력할 사용하는 명령어 "

 

)

[orcl:~]$ echo 'i am me'

 

설명)

echo -e "     "

-e 옵션: 역슬래쉬(\) 이스케이프 문자로서 있게 하는 옵션

 

)

$ echo -e "\"삭제하였습니다.\""
"삭제하였습니다."

 

 

문제 52) 직업을 물어보게 하고 직업을 입력하면 해당 직업을 갖는 사원들의 이름과 직업이 출력되게

하시오

 

)

$ vi job2.sh


a


#1/bin/bash


echo "       "
echo -n "직업을 입력하세요 "
read job
echo "    "
grep -i $job emp.txt | awk '{print $2, $3}'


저장하고 나와서
$ sh job2.sh

 

설명)

#1/bin/bash : 스크립트 중에 bash 스크립트를 쓰겠다
echo "       " : 공백 출력
echo -n "직업을 입력하세요 " : 메시 출력 엔터가 수행된
read job : job 이라는 변수에 입력한 직업이 들어간다

 

 

 

문제 53) 부서번호를 물어보게 하고 부서번호를 입력하면 해당 부서번호에서 근무하는 사원들의 이름과

월급과 부서번호가 출력되게 하세요

 

보기)

$ sh deptno2.sh


부서번호를 입력하세요: 10

 

)

#1/bin/bash


echo "        "
echo -n "부서번호를 입력하세요: "
read deptno
echo "       "
awk '{print $2, $6, $8}' emp.txt | grep -w $deptno

 

 

 

문제 54) 이름을 물어보게 하고 이름을 입력하면 아래와 같이 출력되게 하시오

 

보기)

vi find_sal.sh


이름을 입력하세요: scott
SCOTT 월급은 3000 입니다.

 

)

#1/bin/bash


echo "  "
echo -n "이름을 입력하세요: "
read name
echo "   "
grep -i $name  emp.txt | awk '{print $2, "의 월급은 ", $6, "입니다"}'

 

 

 

문제 55) 직업을 물어보게 하고 직업을 입력하면 아래와 같이 출력되게 하시오

 

보기)

$ sh job_sumsal.sh


직업을 입력하세요: salesman
토탈 월급은 5600 입니다

 

)

#1/bin/bash


echo "  "
echo -n "직업을 입력하세요: "
read job
echo "   "
grep -i $job emp.txt | awk '{sum += $6} END {print "토탈 월급은 ", sum, " 입니다"}'

 

 

 

문제 56) 입사일을 출력하는데 뒤에 년도만 잘라서 출력하시오

 

)

[orcl:~]$ awk '{print substr($5, 8, 10)}' emp.txt

 

 

 

문제 57) 년도를 물어보게 하고 년도를 입력하면 해당 년도에 입사한 사원들의 이름과 입사일이

출력되게 하시오

 

보기)

$ sh year.sh


입사년도를 입력하세요: 81

 

)

#1/bin/bash


echo "  "
echo -n "입사년도를 입력하세요: "
read hiredate
echo "   "
grep -w $hiredate emp.txt | awk '{print $2, $5}'

 

 

 

문제 58) 연도를 물어보게 하고 년도를 입력하면 해당 년도의 토탈월급이 출력되게 하시오

 

보기)

$ sh year_sum.sh


년도를 입력하세요: 81
토탈 월급은 10290 입니다.

 

)

#1/bin/bash


echo "  "
echo -n "입사년도를 입력하세요: "
read hiredate
echo "   "
grep -w $hiredate emp.txt | awk '{sum += $6} END {print "토탈월급은 ", sum, " 입니다."}'

 

반응형