column 추출하기
awk 명령은 일종의 잘 정제된 program lanugage입니다. awk 명령은 많은 작업을 하지만, 여기에서는 text의 column을 추출하는 일을 알아보도록 합니다.
$ ps auwx | awk '{print $1,$11}' USER COMMAND root /sbin/init root [kthreadd] root [migration/0] root [ksoftirqd/0] root [watchdog/0] root [events/0] root [cpuset] root [khelper] root [netns] ... $ ps auwx | awk '/greenfish/ {print $11}' /usr/lib/gvfs//gvfs-fuse-daemon sshd: sshd: sshd: sshd: awk $ ps auwx | grep greenfish | awk '{print $11}' /usr/lib/gvfs//gvfs-fuse-daemon sshd: sshd: sshd: sshd: grep |
awk '{printf $1,$11}'을 통해 ps 명령의 1, 11 번째 column을 출력하도록 합니다.
기본적으로 awk 명령은 space로 column이 구분되었다고 가정하는데, -F 옵션을 이용하여 다른 구분자를 지정할 수 있습니다.
$ awk -F: '{print $1,$5}' /etc/passwd root root daemon daemon bin bin sys sys sync sync games games ... |
그리고 cut 명령으로도 비슷한 결과를 볼 수 있습니다. 구별자를 :로 하는 이전의 awk 예제는 다음과 같습니다.
$ cut -d: -f1,5 /etc/passwd root:root daemon:daemon bin:bin sys:sys sync:sync ... |
cut 명령은 field를 범위지정할 수 있습니다. 다음은 /etc/passwd의 1 부터 5까지의 column을 출력합니다.
$ cut -d: -f1-5 /etc/passwd root:x:0:0:root daemon:x:1:1:daemon bin:x:2:2:bin sys:x:3:3:sys sync:x:4:65534:sync games:x:5:60:games ... |
-를 사용하여 범위를 지정하는 대신 특정 column 이하 모든것을 출력할 수 있습니다. 다음은 5번째 column 이하를 모두 출력합니다.
$ cut -d: -f1- /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh ... |
보통 ps 명령과 같이 space로 구별된 column의 결과를 출력하는데 awk 명령을 선호하기는 합니다. 그리고 /etc/password file같이 ,나 :로 구별된 결과를 출력하는데에는 cut 명령을 선호합니다.
unix 계열의 text file은 다른 줄바꿈 문자(\n)가 사용됩니다. DOS/Window는 \r\n가 사용됩니다. od 명령으로 이런 특수문자를 볼 수 있습니다.
$ od -c -t x1 myfile.txt 0000000 1 \n 2 \n 3 \n g r e e n f i s h 31 0a 32 0a 33 0a 67 72 65 65 6e 66 69 73 68 20 0000020 i s m y i d \n h e l l o , w 69 73 20 6d 79 69 64 0a 68 65 6c 6c 6f 2c 20 77 0000040 o r l d ! \n 6f 72 6c 64 21 0a 0000046 $ cat myfile.txt 1 2 3 greenfish is myid hello, world! |
제대로된 화면 출력을 위해서 상이한 환경에서 복사된 파일은 다음과 같이 file을 변환하여 사용하는 것이 필요합니다. 해당 명령은 tofrodos package가 설치되어야 합니다(sudo apt-get install tofrodos).
$ unix2dos < myunixfile.txt > mydosfile.txt $ cat mydosfile.txt | dos2unix > myunixfile.txt |
[출처 : http://greenfishblog.tistory.com/69]
'Academy I > Tech Academy' 카테고리의 다른 글
[Linux]ps, top을 이용하여 프로세스(process) 관리하기 (0) | 2015.01.02 |
---|---|
[Linux]매체 백업 (mkisofs, cdrecord). 굽기(cd burn) (0) | 2015.01.02 |
[Linux]network, internet, tcp/ip로 백업하기 (ssh, tar, rsync) (0) | 2015.01.02 |
[Linux]tar, gzip, bzip2 사용하기 (0) | 2015.01.02 |
[Linux]diff로 차이점 체크하기 (0) | 2015.01.02 |
[Linux]sed와 tr을 이용하여 text 바꾸기(replace) (0) | 2015.01.02 |
[Linux]sort로 output 정렬, binary file에 문자열 찾기 (0) | 2015.01.02 |
[Linux]wc로 단어수 구하기 (0) | 2015.01.02 |