터미널에서 로그파일을 핸들링하면서 자주쓰이는 명령들이 있습니다. 전체 파일을 출력하기 위해서 cat 명령을 사용하고 특정한 컬럼의 값만 출력하기 위해서 파이프로 연결된 awk 명령을 쓸 때가 많습니다. 그런데, 컬럼이 아주 많은 경우에 특정한 컬럼만 제외하고 나머지를 출력할 수 있는 방법이 있을까요? 컬럼이 적은 경우에는 필요한 필드를 나열하는 것도 괜찮지만, 수십개, 수백개의 컬럼이 있다면 그다지 좋은 방법이 될 수가 없습니다.
예를 들어 temp.txt 파일에 아래와 같이 스페이스로 구분된 10개의 컬럼이 있다고 해보겠습니다. 이 파일의 정보들 중에서 특정한 컬럼의 값만 추출하고 싶다면 awk 명령을 이용해서 print 예약어를 이용할 수 있을 겁니다.
$ cat temp.txt
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
$
$ cat temp.txt | awk '{print $3, $5}'
C3 C5
이 데이터 파일에서 거꾸로 3번 컬럼과 5번 컬럼의 값을 제외한 나머지 컬럼의 값을 추출하려면 어떻게 해야 할까요? print 구문의 파라메터로 $3 과 $5 만 빼고 나열해도 되겠지만, 아래와 같이 명령을 입력하면 훨씬 빠르고 쉽게 특정한 컬럼만을 제외하고 데이터를 정제할 수 있게 됩니다.
$ cat temp.txt | awk '{$3=$5=""; print $0}'
C1 C2 C4 C6 C7 C8 C9 C10
동일한 결과물을 얻어내는 방법이 여러가지 있다면 그중에서 가장 간편한 방법을 택하는 것이 누가 뭐라해도 진리일 겁니다. 작업시간을 절약하고 더 집중해야 하는 것들에 몰입하는 하루 되시길 바랍니다!
2016/09/29 - 터미널에서 sort 명령을 이용하여 특정 컬럼 기준으로 로그파일 정렬하기
2016/09/21 - 파이썬 패키지 매니저 pip 설치하기
2016/08/03 - TCP Fast Open - 보다 빠르게 웹 컨텐츠를 전송하기 위한 기술
2016/07/04 - 맥(Mac)에서 curl 을 통해 http2 테스트를 할 수 있도록 변경하기
2016/07/01 - Cent OS 의 버전과 커널 버전 확인해보기
2016/06/23 - IPv6 에 대응하는 우리의 자세 - NAT64 를 통한 네트워크 트랜지션
2016/06/21 - 보다 빠르고 안전한 https 통신을 위한 트릭 - OCSP 와 OCSP Stapling