DDD tactical components
file data를 파싱할 때 사용하는 커맨드 중 하나이다.
사용성
- 간단한 파일을 일부만 보고 싶을 때
sed
나awk
를 사용해도 되지만, 가장 좋은 성능을 내는 것이cut
이다.- 1GB 이상의 파일로 확인을 해보면 확연한 성능 차이를 볼 수 있다.
- 큰 파일들을 확인하고 싶을 때 vi는 여는데 한참 걸리지만, cut은 금방 볼 수 있다.
- 하나의 라인이 무지막지하게 크다면(예를들면 10GB), vi 등으로 열 수 없는 경우가 있다. 당연히 하나의 라인이라
head
로도 확인할 수 없고.. 이럴 때 어떤 데이터인지cut
으로 확인할 수 있다.- 물론 이럴때 split을 사용하는 것도 좋다.
파일 사이즈가 크나, 단순하고 동일한 포맷일 때 사용하기 굉장히 좋다.
- batch 작업을 위한 userdata를 추출해 놓았을 때
- 많은 양의 단순한 비규격 로그의 파싱이 필요할 때
사용법
사용법은 간단하다.
몇가지 사용법을 적지만 사실 맨 처음의 cut -d -f의 사용률이 가장 높다.
일부 char를 잘라내야 하는 경우에서도 유용하게 사용된다.
cut의 단점은 char로만 자를 수 있다는 것이지만 생각보다 이렇게 사용할 데이터들이 굉장히 많고, 성능은 그만큼 훌륭하다. 파일의 파싱이나 데이터 추출, command pipe에서 자주 사용한다.
delimiter 단위로 자르기
cut -d 'DELIMITER' -f INDEX FILE
-d:
- 어떤 char로 자를지에 대한 옵션.
- char만 올 수 있기 때문에, string을 넣을 수 없음.
-f:
- 자르고 나서 몇 번째의 값을 가지고 올 것인지 설정.
N
,N-M
,N,M-L
과 같이 설정 가능.
delimiter가 없는 라인 무시하기
cut -d 'DELIMITER' -f INDEX -s FILE
-s:
- delimiter가 없는 라인은 아예 출력도 하지 않도록 하는 옵션.
delimiter를 변경하기
cut -d 'DELIMITER' -f INDEX --output-delimiter="OUTPUT DELEMETER" FILE
–output-delimiter:
- delimiter로 자른 라인의 구분자를 바꿔줄 문자열.
character 단위로 잘라내기
cut -c INDEX
-c:
- character 단위로 잘라낼 수 있다.
- 동일하게
N
,N-M
,N,M-L
과 같이 설정 가능.
예시
아래와 같은 food 라는 파일이 있다고 치자.
> cat food
pizza,0001,20000
chicken,0002,20000
burger,0003,15000
sandwich,0004,8000
sushi,0005,20000
> cut -d ',' -f 1 food
pizza
chicken
burger
sandwich
sushi
> cut -d ',' -f 1,3 food
pizza,20000
chicken,20000
burger,15000
sandwich,8000
sushi,20000
> cut -d ',' -f 1-3 --output-delimiter="/" food
pizza/0001/20000
chicken/0002/20000
burger/0003/15000
sandwich/0004/8000
sushi/0005/20000
> cut -c 1-5 food
pizza
chick
burge
sandw
sushi
> cut -c 1,3-5 food
pzza
cick
brge
sndw
sshi