Information Retrieval Park CheonEum
Sed?! 비대화형모드의텍스트파일에디터 정규표현식을사용 표준입출력사용 PipeLine 주어진주소범위에대해처리.
연산자이름의미 [ 주소범위 ]/p print [ 주어진주소범위 ] 를출력 [ 주소범위 ]/d Delete [ 주어진주소범위 ] 를삭제 s/pattern1/pattern2 substitute 한라인에서처음나타나는 pattern1을 pattern2로치홖 [ 주소범위 ]/s/pattern1/pattern2 [ 주소범위 ]/y/pattern1/pattern2 substitute transform 주소범위에대해서한라인에처음나타나는 pattern1 을 pattern2 로치홖 주소범위에대해 pattern1 에나타나는어떤문자라도 pattern2 에나타나는문자로변경 g Global 모든라인에서입력과일치하는패턴에대해 동작
표현 8d 입력의 8 번째줄을지워라. /^$/d 빈줄을모두지워라. 뜻 1,/^$/d 첫줄부터처음나타나는빈줄까지지워라. /Jones/p s/windows/linux/ s/bsod/stability/g "Jones" 를포함하는줄만출력하라 (-n 옵션을써서 ). 입력의각줄에서처음나오는 "Windows" 를 "Linux" 로치홖하라. 입력의각줄에서 "BSOD" 가나올때마다 "stability" 로치홖하라. s/ *$// 모든줄의끝에나오는빈칸을지워라. s/00*/0/g 연속적인모든 0 을하나의 0 으로압축하라. /GUI/d "GUI" 를포함하는모든줄을지워라. s/gui//g "GUI" 가나오는줄에서 "GUI" 만지워라.
Text file Sed 임시버퍼 Sed 출력 처리할라인처리할라인처리할라인
메타문자의미예제설명 ^ 라인의처음 /^linux/ Linux로시작하는모든 라인들 $ 라인의끝 /linux$/ Linux로끝나는모든 라인들. 하나의문자매칭, 하지만 newline 문자는제외 * 매칭되는문자가없거나여러개의문자열이될수있다. /l x/ l 로시작해서 x 로끝나는문자가있는라인들 / *linux/ 아무것도없거나, 스페이스로시작하여 linux 문자가있는라인들 [ ] 하나의문자매칭 /[Ll]inux/ Linux 또는 linux를포 함하는라인들
메타문자의미예제설명 [^ ] 하나의문자도매칭되지않음 /[^A-KM- Z]inux/ \(..\) 매칭된문자들저장 s/\(love\) able/\1er/ Inux 앞에 A~K, M~Z 까지문자를포함하지않는라인들 \1 : 1 번 tag 로저장 able 을 er 로치홖 /< 단어의시작 /\<linux/ Linux로시작하는단어 를포함하고있는라인 들을매칭 /> 단어의끝 /linux\>/ Lunux로끝나는단어를 포함하고있는라인들 을매칭 & 치홖문자열로기억될수있는검색문자열을저장 s/linux/**& **/ & 는검색문자열 linux => **linux**
메타문자의미예제설명 x\{m\} X 문자의반복횟수 m 회반복 /o\{5\}/ O 가 5 회반복 x\{m,\} 적어도 m 회반복 /o\{5,}/ O 가적어도 5 회반복 x\{m,n\} m회 ~n회사이반복 /o\{5,10\}/ O가 5회에서 10회사 이반복
AWK?! 데이터를조작하고리포트를생성하기위해사용하는얶어. 데이터조작가능으로쉘스크립트에서의필수툴. Alfred Aho, Peter Weinberger, Brian Kernighan
CentOS 리눅스 100 $0 File, pipeline 에서입력라인을얻어와 $0 내부변수에저장. CentOS $1 리눅스 $2 100 $3 라인은공백을기준으로각각의필드나단어로나뉨. $1 부터시작해서많게는 100 개이상의필드를가진다.
BEGIN 입력데이터를실행하기에있어적젃한형태로만들어주는단계. Preprocess 라고함. ROUTINE END BEGIN 에서정규화된 data 를실제루틴으로처리하는단계. Process routine 에따라처리. Input data 가 routine 을거쳐 output data 로. 데이터가처리된후에처리해야할내용들을담고있다.
Awk 의사용법 데이터또는유사데이터양식의파일및자료를처리 통계자료, 실험식의계산결과등의통계, 비교, 다른형태의문서로변홖 Awk 사용의 process egrep 및 grep 을이용한데이터파일의구조를확인한다. 정규화가가능하지를확인하고, sed 로테스트해본다. awk 가처리할만큼정규화되어있다면바로 awk 를사용. sed 로정규화된양식을 awk 로처리.
변수명 변수내용 FS Fields Seperator ( 필드구분자 ) RS Recodes Seperator ( 레코드구분자 ) NF Number of Fields ( 현재레코드의필드수 ) NR Number of Records ( 현재파일에서레코드넘버 ) FNR 입력파일이여러개인경우에현재파일에서의 NF를표시. OFS 출력시의 FS(Ouput Fidels Seperator). ORS 출력시의 RF(Ouput Records Seperator).
Awkfile 을출력 Awkfile 에서 CheonEum 필드를가진레코드를출력
Awkfile 의첫번째필드를모두출력
변환문자정의변환문자정의 c 문자 lx long 16 진수 s 문자열 o 8 진수 d 10 진수 lo long 8 진수 ld long 10진수 e 지정한표기에서 c float u unsignwd 10진수 f float( 실수 ) lu x long unsignwd 10 진수 g 16 진수 e 또는 f 를사용한실수로적어도공백을가진다
포맷지정자설명포맷지정자설명 주어진변수값 : x= A, y=15, z=2.3, $1=CentOS %c ASCII 문자하나를출력 %o 8 진수를출력 %d 10 진수하나를출력 %s 문자열을출력 %e e 기호의숫자를출력 %f float 실수형수를출력 %x 16 진수를출력
awk 에서액션은중괄호 ({ }) 로둘러싸인문장이며세미콜론 (;) 으로구분된다. 패턴은액션앞에오며, 액션은갂단한문장또는복잡한문장들의그룹으로만들수있다. 문장들은세미콜론 (;) 또는 newline 에의해분리된다. 형 식 pattern{ action statement; action statement; etc.} 또는 pattern{ action statement action statement }
awk 액션과명령이파일에작성되어있다면 f 옵션을사용. awk 명령을특정한파일에저장해두고이파일에입력된명령을사용하여다른파일을처리하고자할때사용한다. 형식 : awk f [awk 명령파일 ] [awk 명령을적용할텍스트파일 ]
$0 은현재의모든레코드를그대로저장. -> 화면에출력
awk 에서는파이프를오픈하기젂에사용하던파이프는닫아야한다. 파이프심볼의오른쪽명령은큰따옴표 ( ) 로둘러싼다. 파이프는한번만오픈가능! 큰따옴표 ( ), 내림차순 큰따옴표 ( ) 없으면
파이프를다시읽고쓰기위해서는첫번째파이프는닫아줘야한다. Why?! 스크립트가끝날때까지오픈된상태로남아있기때문!! 즉, awk 가종료될때까지오픈된상태로남아있게된다. END 로파이프를닫는다.
awk 프로그램에서의조건문은 C 얶어로부터가져온것. 조건표현식이참 (true, 0 이아님, null 이아님 ) 이면문장실행. 문장은세미콜론 (;) 으로분리할수있다. if ( 조건표현식 ) { 문장 ; 문장 ; }
먼저임의의변수에초기값을저장. while 문의표현식이참 (true, 0 이아님 ) 이면루프아래문장실행. 실행할문장수가많다면중괄호 ({ }) 로감싸준다.
for loop 는괄호안에초기화표현식, 테스트표현식, 테스트표현식의변수를업데이트하기위한표현식 각표현식들은세미콜론 (;) 으로구분한다. awk '{for( i=1; i<=nf; i++) print NF, $i}' awkdata
Thank you