InfraPlatform

[Bash Shell-Script 기초] awk, cut, sort 활용

IT오이시이 2014. 6. 16. 11:29
728x90

 

[Bash Shell-Script 기초] awk, cut, sort 활용 : 중상급 과제

 

awk, cut, sort 는 셀스크립트에서 가장 많이 사용하는 명령들입니다.

awk 는 파일을 읽고 c언어와 같은 프로그램 처리가 가능하고, cut 는 특정 문자열에서 값을 잘라내는 것으로 많이 사용됩니다.  sort는 파일의 입력 값을 소팅하여 출력하는 것입니다.

명령은 쉽고 단순하지만 이들의 명령을 복합적으로 엮어서 하나의 프로그램 처럼 작동하게 하는 것이 중요한데 그러려면 각각에 대한 기초적인 연습들이 필요합니다. 

아래와 같은 데이터 파일이 있다고 가정하여 문제를 해결해 보면서 각각의 쓰임새를 보면 좋겠습니다.

 

# cat 으로 입력 되는 값을 data.file로 생성을 합니다.
  <<!   부터 하단의 ! 까지
  보통 <<EOF   ~~  EOF   로 사용하는데  EOF는 블럭의 시작과 끝을 표시합니다.

cat > data.file  <<!
2008/12/08 23:59:56^popupmini1^WIDGET^null^null^01083744579^00003491^null^000^null^null
2008/12/08 23:59:56^popupmini1^WIDGET^null^null^01083744577^00003491^null^000^null^null
2008/12/08 23:59:56^popupmini1^WIDGET^null^null^01095598312^00003371^null^000^null^null
2008/12/08 23:59:57^popupmini1^WIDGET^null^null^01053823462^00003521^null^000^null^null
2008/12/08 23:59:58^popupmini1^WIDGET^null^null^01029560520^00002951^null^000^null^null
2008/12/08 23:59:58^popupmini1^WIDGET^null^null^01030204242^00003523^null^000^null^null
2008/12/08 23:59:56^popupmini1^WIDGET^null^null^0163744579^00003491^null^000^null^null
!

 

 

[문제1]
  위의 결과에서 아래와 같이 전화 번호만 출력 하시오

[출력 결과 1]
01083744579
01083744577
01095598312
01053823462
01029560520
01030204242
0163744579

 

 

[문제2]
  문제1의 결과를 이용하여 오름 차순으로 소팅하여 출력 하시오

[출력 결과 2]
0163744579
01029560520
01030204242
01053823462
01083744577
01083744579
01095598312

 

 

 

[답안]

[답안 문제1 ] : awk 의 field seperator를 묻는 질문이다.
 # awk -F"^" '{ print $6; }' data.file
 # cut -d"^" -f6 a
01083744579
01083744577
01095598312
01053823462
01029560520
01030204242
0163744579

 

 

 

[답안 문제2]  : 숫자형의 소팅을 위한 옵션을 묻는 질문이다.

 #> cut -d"^" -f6 a | sort -g
  -  cut 은 입력되는 문자열 의 구분자로 deliminator  -d 로 "^" 를 이용해서 -f 필드 6 번째 필드 값을 출력 합니다.
  - 그리고 출력되는 값을 sort 명령으로 -g   숫자형으로 인식하여 소팅하는 것입니다. 
 
#> awk -F"^" '{ print $6; }' a | sort -g
  -  awk로  -F는 필드 구문자로 "^" 를 이용하여  문자열의 6번째 값을  $6을 찾아 프린트 합니다.
   *  -g, --general-numeric-sort : compare according to general numerical value
   *   -n, --numeric-sort              : compare according to string numerical value

* 위의 내용을 실행하면 다음과 같은 출력을 보여 줍니다.
0163744579
01029560520
01030204242
01053823462
01083744577
01083744579

01095598312
 

 

728x90
반응형