DDD tactical components

Terminal Shortcut tmux cut jq screen split

file data를 파싱할 때 사용하는 커맨드 중 하나이다.

사용성

  1. 간단한 파일을 일부만 보고 싶을 때 sedawk를 사용해도 되지만, 가장 좋은 성능을 내는 것이 cut이다.
    • 1GB 이상의 파일로 확인을 해보면 확연한 성능 차이를 볼 수 있다.
  2. 큰 파일들을 확인하고 싶을 때 vi는 여는데 한참 걸리지만, cut은 금방 볼 수 있다.
  3. 하나의 라인이 무지막지하게 크다면(예를들면 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