[완료]awk, sed 및 쉘 등을 사용하여...나올수있는형식...문의
다음과 같은 파일이 있는데요
cat a.log
1:5208::46:::::0:0:0:58472609:17283700:::::
2:5208::46:::::0:0:0:58490160:17292236:::::
3:5208::6:::::0:0:0:58474985:17297424:::::
.
.
.
47:5208::6:::::0:0:0:58465929:17300406:::::
48:5208::6:::::0:0:0:58481078:17300864:::::
49:5208::46:::::0:0:0:58502366:17302819:::::
50:5208::1:::::0:0:0:58473093:17303859:::::
에서...
cat b.log 파일
1:5208::46:::::0:0:0:58472609:17283700:::::
2:5208::46:::::0:0:0:58490160:17292236:::::
3:5208::6:::::0:0:0:58474985:17297424:::::
.
.
.
이고요...맨앞 필드가 아이디 인데요... a.log 파일은 중간중간 빠져서 1 -> 2 -> 5 -> 8 이런식으로 갈수도있고요~ 그래서 라인이 100라인 이라도 아이디가 2000번으로 끝날수도 있는..
b.log 파일은 신규로 생각해서 순서대로 쭉 제대로 있는데...
질문은 두개의 파일을 합치는데... b파일을 a파일에 합치는...cat b.log >> a.log 이렇게..해서... 예전엔 붙인후에 awk나 sed를 이용해 다시 차례대로 소팅해서 사용했는데..기존 a.log파일의
변경기록 관리가 안되어서...ㅠㅠ
b.log 파일이 a에 붙으면서...맨앞 아이디 필드가 1 2 이게..51 52 ...이렇게 해서 붙게 할려고하는데 맘대로 안되네요~
원하는결과 결과...
1:5208::46:::::0:0:0:58472609:17283700:::::
2:5208::46:::::0:0:0:58490160:17292236:::::
3:5208::6:::::0:0:0:58474985:17297424:::::
47:5208::6:::::0:0:0:58465929:17300406:::::
48:5208::6:::::0:0:0:58481078:17300864:::::
49:5208::46:::::0:0:0:58502366:17302819:::::
50:5208::1:::::0:0:0:58473093:17303859::::: <----여기까지 a.log 파일
51:5208::46:::::0:0:0:58472609:17283700::::: <----여기서부터 b.log파일
52:5208::46:::::0:0:0:58490160:17292236:::::
53:5208::6:::::0:0:0:58474985:17297424:::::
도와주세요~
이렇게
.
.
.
.
이렇게
설명은 생략~
....
설명이 없어서..맞게 이해한지 모르겠는데요..
이렇게 하면 a.txt파일의 마지막 아이디를 변수로 잡아서 b.txt파일에서 그아이디 보다 큰것만
출력...? 이런뜻아닌가여?
b.txt파일에 a.txt파일 id보다 큰것이 없으면 붙여넣기가 안되는거 아닌가요?
b.txt파일을 전부 a.txt파일에 붙여넣기 하고싶은데요..b.txt파일의 아이디는 a.txt파일 마지막
아이디 다음부터 다시 정렬되면서요...
아~ 문제를 좀 잘 못 이해했군요. 그럼 다시
.
.
.
아~ 문제를 좀 잘 못 이해했군요. 그럼 다시
a.txt
b.txt
스크립트
결과
Perl로 하면 깔끔하겠지만 쉘로하시는 걸 원하시니 약간은 dirty할 수 밖에 없는~
match부분이...이해가안가네요 ㅠㅠ
match(s,r) 문자열 s에서 정규표현식 r과 매칭되는 부분의 위치를 넘겨준다.
이렇게 써있는데요
match( $0, /([^:]*?)(.*)/, a) 인수가 3개네요... 정규식표현과...a..
$0전체줄을 "처음부터 한줄"을 a로 받아서 a[1] 첫번째 필드에 num 더하고.. a[2]두번째 필드
출력인가요?
이해가 잘안되니...제것으로 만들기가..힘드네요~ㅎㅎ
시간되시면 Perl으로도...부탁드려요~^^ 설명도좀...ㅎㅎ
match 의 3인자는
match 의 3인자는
대상스트링,정규표현식,배열명 으로
정규표현식에서 그룹핑(grouping)된 것 정규식에서 ( )로 묶은 부분이
차례로 배열에 들어가게 됩니다. 그래서 첫번째 그룹핑 ([^:]*?) 는 a[1]이
두번째 그룹핑 (.*) 는 a[2]가 되는거지요.
감사합니다..( ' ' )( .. ) 꾸뻑~~ 답변에 감사드립니다.
^^
Perl one-liner입니다.
.
.
.
한 번 쓰고 버릴 one-liner 면 이렇게~
댓글 달기