unique 명령어: 중복 제거하기

- 연속된 중복 데이터를 하나만 출력하는 명령어

- 같은 내용이 연속되어 있는 경우에만 중복을 없애는 명령어

 

예시: file1.txt :: 

Seoul Seoul
Seoul
Busan
Busan
busan
1
1
Seoul

 

$ uniqu file1.txt
Seoul Seoul
Seoul
Busan
busan
1
Seoul

 

sort 를 이용하여 중복을 제거하는 방법

$ sort file1.txt | uniq
1
Busan
Seoul
Seoul Seoul
busan

$ sort -u file.txt
1
Busan
Seoul
Seoul Seoul
busan

 

중복 데이터의 개수 세기

$ sort file1.txt | uniq -c
      2 1
      2 Busan
      2 Seoul
      1 Seoul Seoul
      1 busan
      
# uniq -c 결과를 정렬하여 중복이 많은 순으로 출력
$ sort file1.txt | uniq -c | sort -rn
      2 Seoul
      2 Busan
      2 1
      1 busan
      1 Seoul Seoul

# uniq -c 결과를 역 순으로 출력
$ sort file1.txt | uniq -c | sort -n
      1 Seoul Seoul
      1 busan
      2 1
      2 Busan
      2 Seoul

배우는 내용 : [ "wc" : 바이트 수, 단어 수, 행 수 세기 "sort" : 행 단위로 정렬  "ps" 프로세스 아이디(PID)순으로 출력]

 

wc 명령어

출력 내용 예시

$ wc result.txt
# (행 수) (단어 수) (바이트 수) (파일 이름)
    23     206      1136   result.txt

 

- 옵션 사용

$ wc -l result.txt
23   result.txt     # 행 수 표시

$ wc -w result.txt
206  result.txt    # 단어 수 표시

$ wc -c result.txt
1136   result.txt  # 바이트 수 표시

 

- 조합 

$ ls / | wc -l
23               # 루트 디렉터리에 있는 파일과 디렉터리 수 출력 

$ ls / | wc -l -
23 -             # - 을 지정하여 표준입력을 읽음

 

sort 명령어

출력 내용 예시

- 옵션이 없으면 알파벳순으로 정렬 : 이때 ASCII 코드를 기준으로 정렬

-  a : 97   A:65  로 인식

예시 :  sort-test.txt  ->  Busan,  Incheon, Seoul, 10, 5, 1, apple

$ sort sort-test.txt
1
10
5
Busan
Incheon
Seoul
apple

$ sort -r sort-test.txt # -r 역순으로 정렬
apple
Seoul
Incheon
Busan
5
10
1

$ sort -n sort-test.txt # -n 문자를 숫자로 인식하여 정렬
Busan
Incheon
Seoul
apple
1
5
10

$ sort -nr sort-test.txt 
10
5
1
apple
Seoul
Incheon
Busan

 

 

- 파이프를 이용하여 응용 가능

ps  : 프로세스 ID PID 순으로 출력

$ ps x
PID TTY      STAT   TIME COMMAND
   1201 ?        Ss     0:00 /lib/systemd/systemd --user
   1202 ?        S      0:00 (sd-pam)
   4961 ?        Ssl    6:18 PM2 v5.3.1: God Daemon (/home/ubuntu/.pm2)
....

$ ps x | sort -k 5  # 5번째에 있는 COMMAND 필드를 기준으로 정렬
   1202 ?        S      0:00 (sd-pam)
  50248 pts/0    Ss     0:00 -bash
   1201 ?        Ss     0:00 /lib/systemd/systemd --user
    PID TTY      STAT   TIME COMMAND
   4961 ?        Ssl    6:18 PM2 v5.3.1: God Daemon (/home/ubuntu/.pm2)
....

 

ls 명령어로 나온 결과를 파일 크기가 큰 순으로  최상위 3개만 출력 

$ ls -l /bin/ | sort -rn -k 5 | head -n 3
-rwxr-xr-x 1 root root    91859064 Feb 13 21:33 node
-rwxr-xr-x 1 root root    16138392 May 29  2023 snap
-rwxr-xr-x 1 root root     5904904 Nov 20 15:14 python3.10

 

배우는 내용 : [ 파이프라인 "|" , 명령어의 표준 출력을 다른 명령어의 표준 입력으로 연결]

 

파이프라인 기호 사용방법

<명령어 1> | <명령어 2> [| <명령어 3>] ...

 

명령어의 실행 결과를 임시파일에 저장한 뒤에 조회

$ ls -l / > temp_list.txt
$ less temp_list.txt

 

 - 파이프라인을 사용

$ ls -l / > temp_list.txt | less temp_list.txt

 

명령어 세개를 연결

$ ls -l /etc | cat -n | less

배우는 내용 : [ /dev/null 활용방법 ]

 

/dev/null 의 특성

- 특수 파일

- 입력 파일로 지정해도 아무 내용도 입력되지 않는다.

- 출력 파일로 지정해도 아무 내용도 기록되지 않는다.

 

활용 예시

▷ 빈 내용의 표준 입력

$ cat < /dev/null
$                 # 아무것도 표시되지 않음

 

▷ 표준 출력 무시

$ cat /etc/crontab > /dev/null

 

▷ 표준 에러만 출력 (에러 메세지만 출력)

$ ls / /xxxx > /dev/null
ls: cannot access '/xxxx': No such file or directory

  -  표준 출력으로 출력되는 양이 너무 많거나 표준 에러 출력만 확인하고 싶을때 사용

 

▷ 표준 에러 출력을 무시  -  확인하지 않아도 되는 에러 메세지가 너무 많이 출력되는 경우에 사용 

$ ls / /xxxxx 2> /dec/null
/:
bin   dev  home  lib32  libx32      media  opt   root  sbin  srv  tmp  var
boot  etc  lib   lib64  lost+found  mnt    proc  run   snap  sys  usr

 -  확인하지 않아도 되는 에러 메세지가 너무 많이 출력되는 경우에 사용 

 

▷ 표준 출력과 표준 에러 출력을 무시

$ ls / /xxxx > /dev/null 2>&1

배우는 내용: [ 덮어쓰기, 기존 내용에 이어서 저장, 덮어쓰기 방지]

 

▷ 기존 파일의 내용에 덮어쓰기

$ echo 123 > number.txt
$ cat number.txt
123
$ echo 456 > number.txt
$ cat number.txt
456

 

▷ 기존 파일에 리다이렉션을 이용하여 이어서 저장하기 ">>"

$ echo 789 >> number.txt
456
789

 

▷ 기존 파일에 리다리렉션으로 덮어쓰는 것을 방지 

$ set -o nolobber
$ ls -l > list.txt
-bash: list.txt: cannot overwrite existing file

 

 

+ Recent posts