2010. 12. 9. 08:51
Linux/Ubuntu의 awk, cut, od, unix2dos
2010. 12. 9. 08:51 in Research/Ubuntu
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 |
기본적으로 swk 명령은 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 |
'Research > Ubuntu' 카테고리의 다른 글
[Linux/Ubuntu 파일 시스템 관리] File system 생성하고 관리하기 (parted로 파티션 크기 변경하기) (02) (2) | 2013.12.13 |
---|---|
[Linux/Ubuntu 파일 시스템 관리] 기초 (0) | 2010.12.10 |
Linux/Ubuntu에서 diff로 차이점 체크하기 (0) | 2010.12.08 |
Linux/Ubuntu에서 sed와 tr을 이용하여 text 바꾸기(replace) (0) | 2010.12.07 |
sort로 output 정렬하고 활용하고 binary file에 문자열 찾기 (0) | 2010.12.07 |