[완료]awk FS설정시
글쓴이: jungwook / 작성시간: 화, 2010/02/23 - 10:00오후
안녕하세요?
작성한 스크립트에서 두가지 질문이 있습니다.
awk ' BEGIN{FS="[:\t||]"; OFS=","}; { if((NR % 10)==4) { {for ( i = 1; i <= NF; i++) print ","$i"," } } };
첫번째로
BEGIN{FS="[:\t||]";};
[] 안의 "||" 이게 하나의 구분자가 되었으면 좋겠습니다.
두번째는
현재 awk로 처리하는 문서가
data (공백): (탭) ||566311464(공백) ||32428343(공백) ||27693333(공백) ||14.6014552763
탭과 공백이 표시가 안되서 (공백), (탭) 이렇게 넣어났습니다.
이런 형식의 문서인데,
위의 출력을 보면
,l2c ,
, ,
,,
,265916704,
이런식으로 나옵니다. 여기서 의문점은 세번째 라인 즉, $3 인데, "||" 문자사이에 공백도 없고 아무것도 없는데 어떻게 $3으로 인식되는지 궁금하네요.
즉 위의 FS에서 설정된 "||" 이게 하나의 "|" 이거 하나로 인식되는 것 같은데 말입니다.
답변 부탁드릴께요.
Forums:
1. 우선 FS에 대입되는
1. 우선 FS에 대입되는 문자열은 정규표현식이기 때문에 | 는 or로 쓰이게 됩니다.
따라서 "||"를 구분자로 쓰고 싶으시면 Escape을 해주셔야 합니다.
다만 보통 `\'로 하게 마련인데 `\\'로 Escape 해야 하더군요.
처음의 | 은 awk에서 or로 해석되구요.
두번째와 세번째의 경우 `\\|' -> 문자 자체 `|' 이 됩니다.
2. [ ] 안에서 ||는 의미가 없습니다. 그냥 |으로 인식되므로 위의 레코드에서
데이터1||데이터2
경우 "데이터1", "", "데이터2" 으로 나뉘게 됩니다.
따라서 $3가 존재합니다.
--
perl -e's@@JEON Myoung-jin@;sub man{s| _|her e|}
sub see{s;^;Just;;u;s;e ;Perl ;;to;print$_,$/}$uperMan=M;
s=^....=U are not=;s~$uperMan~~;&admitIt;s=U are = A=;s|young|_|;&man;
sub admitIt{say;ye;s!-\w+! Hacker!};see U
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
답변 감사합니다.
감사합니다.
댓글 달기