Linux Commands
file data를 파싱할 때 사용하는 커맨드 중 하나이다.
데이터를 파싱하고, 전처리하는 과정에서 효율이 굉장히 좋은 커맨드.
사용성
- 간단한 파일을 일부만 보고 싶을 때
sed
나awk
를 사용해도 되지만, 가장 좋은 성능을 내는 것이cut
이다.- 1GB 이상의 큰 파일로 확인을 해보면 확연한 성능 차이를 볼 수 있다.
- 큰 파일들을 확인하고 싶을 때 vi는 여는데 한참 걸리지만, cut은 금방 볼 수 있다.
- 하나의 라인이 무지막지하게 크다면(예를들면 10GB), vi 등으로 열 수 없는 경우가 있다. 당연히 하나의 라인이라
head
로도 확인할 수 없고.. 이럴 때 어떤 데이터인지cut
으로 확인할 수 있다.- 물론 이럴때 split을 사용하는 것도 좋다.
- python 같은 스크립트를 사용할 때도 데이터를 전처리하면 성능이 크게 올라간다.
이런 데이터 전처리는 파일 사이즈가 크나, 단순하고 동일한 포맷일 때 사용하기 굉장히 좋다.
- batch 작업을 위한 userdata를 추출해 놓았을 때
- 많은 양의 단순한 비규격 로그의 파싱이 필요할 때
사용법
몇가지 사용법을 적지만 사실 맨 처음의 cut -d -f의 사용률이 가장 높다.
일부 char를 잘라내야 하는 경우에서도 유용하게 사용된다.
cut의 단점은 char로만 자를 수 있다는 것이지만 생각보다 이렇게 사용할 데이터들이 굉장히 많고, 성능은 그만큼 훌륭하다.
db dump, csv, json과 같이 포맷이 일정한 데이터를 파싱할 때 함께 사용할 수 있다. 파일의 파싱이나 데이터 추출, 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
과 같이 설정 가능.