리눅스 명령어 정리(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"가 포함된 줄의 수 출력