리눅스 명령어 정리(4) - cut, sort, uniq, wc

Ubuntu 14.04 LTS 환경을 기준으로 작성되었습니다.

cut

각 줄마다 필요한 부분만 잘라내어 반환해주는 명령어

옵션

  • -d: 구분자 설정(기본적으로 구분자를 tab 문자로 사용)
  • -f: 추출할 위치 또는 구간 설정

예시

$ echo "a,b,c,d,e,f," | cut -d "," -f 3,5

: "c,e," 출력

$ echo "a,b,c,d,e,f," | cut -d "," -f 3-5

: "c,d,e" 출력

$ echo "a,b,c,d,e,f," | cut -d "," -f 4-

: "d,e,f" 출력

access.log 파일의 내용이 아래와 같다고 가정하자.

221.148.180.35 - - [17/May/2017:06:06:26 +0000] "PATCH /api/v1/students/304/ HTTP/1.1" 200 627 "http://school.fastcampus.co.kr/students/210/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30"  
221.148.180.35 - - [17/May/2017:06:12:36 +0000] "PATCH /api/v1/courses/20/ HTTP/1.1" 200 137 "http://school.fastcampus.co.kr/admin/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"  
221.148.180.35 - - [17/May/2017:06:12:37 +0000] "PATCH /api/v1/schools/5/ HTTP/1.1" 200 14890 "http://school.fastcampus.co.kr/admin/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"  
$ cat access.log | cut -d " " -f 7

/api/v1/students/304/
/api/v1/courses/20/
/api/v1/schools/5/

: 경로 부분 출력

$ cat test.log | cut -d '"' -f 6

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30  
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36  
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36  

: 브라우저 이름 부분 출력

$ cat test.log | cut -d "[" -f 2 | cut -d "]" -f 1

17/May/2017:06:06:26 +0000  
17/May/2017:06:12:36 +0000  
17/May/2017:06:12:37 +0000  

: 날짜 부분 출력


sort

숫자순, 알파벳 순으로 정렬해주는 명령어

옵션

  • -r: 내림차순 정렬(기본적으로 오름차순)
  • -t: 구분자 지정
  • -k: 정렬할 열 지정
  • -n: 숫자로 해석해서 값의 크기로 정렬
  • -b: 포함된 공백 무시

예시

$ cat test.txt | sort

: test.txt의 각 줄을 오름차순으로 정렬하여 출력

people.csv의 내용이 아래와 같다고 가정하자.

번호, 이름, 아이디,  직업, 월급
1, 주승환, jupiny, 26세, 학생, 50  
2, 김철수, cheolsuya, 32세, 사업가, 2000  
3, 홍길동,  gildong123, 19세, 선생님, 100  
4, 이지은, iu_25, 25세, 연예인, 780  
$ cat people.csv |
    tail -n +2 |
      cut -d "," -f 2-6 |
        sort -t "," -k 5 -n

 주승환, jupiny, 26세, 학생, 50
 홍길동,  gildong123, 19세, 선생님, 100
 이지은, iu_25, 25세, 연예인, 780
 김철수, cheolsuya, 32세, 사업가, 2000

: people.csv의 월급 순으로 정렬하여 출력

$ cat people.csv |
    tail -n +2 |
      cut -d "," -f 1-3 |
        sort -t "," -k 3 -b

3, 홍길동,  gildong123  
2, 김철수, cheolsuya  
4, 이지은, iu_25  
1, 주승환, jupiny  

: people.csv의 아이디 오름차순으로 정렬하여 출력(정렬시 공백 무시)


uniq

중복을 제거하는 명령어. 단, 이어진 중복만 제거하므로 sort 명령어로 미리 정렬한 다음 사용하면 모든 중복을 제거할 수 있다.

옵션

  • -c: 몇 번 중복되었는지도 출력

예시

$ cat test.txt | sort -r | uniq

: test.txt의 각 줄을 내림차순으로 정렬하여 출력(중복된 줄 제거)

$ cat test.txt | sort | uniq -c | sort -r

: test.txt의 각 줄의 중복 횟수의 내림차순으로 정렬하여 출력


wc

지정한 파일이나 파이프라인으로 넘어온 내용의 줄, 단어, 문자 수를 출력해주는 명령어

옵션

별도의 옵션 지정이 없으면 모두 줄, 단어, 문자 수 모두 출력

  • -l: 줄 수
  • -w: 단어 수
  • -c: 문자 수

예시

$ cat test.txt | grep "abc" | wc -l

: test.txt에서 "abc"가 포함된 줄의 수 출력


출처