2014-05-18 4 views
2

나는 스크립트를 작성 중이며 한 단계에서 멈추다. 나는 컬럼에 따라/UNIQ를 정렬하고 싶은, 내가 3, 4 열 롭 따라 전체 행을 제거하고 싶은 아래열 단위로 정렬하기

229984:usto:150:usto-pdbx-sql13.amgen.com:usto-inf-srvr-W2008phys-prd-w 
229986:usto:156:usto-pdbx-sql13.amgen.com:usto-inf-srvr-W2008phys-prd-w 
230187:usto:50:usto-tsvc-smp03.amgen.com:usto-inf-srvr-W2008phys-tst-r 
230713:usto:58:USTO271389-s.amgen.com:usto-inf-silv-EDM_windows-prd-u 
229814:usto:58:usto-sec-iss-am.amgen.com:usto-inf-silv-security_app-prd-t 
229618:usto:59:usto-pdpx-me020.amgen.com:usto-dev-brnz-matlabDev_app_NFS-prd-r 
229255:usto:84:usto-dsvc-emfb1:usto-idm-silv-arcot_windows-dev-f 

에서 위의에 도움을 주시기 바랍니다. 3과 4 엔트리 반복의 행이 있으면 같은 것을 제거하고 싶습니다.

감사의 말씀에 감사드립니다.

+0

시작을 참조 = -k3 -k4 -u를하고 어떻게 참조 당신을 위해 일합니다. 정렬에서 옵션 상호 작용이 너무 복잡 해지면 awk로 전환 할 것입니다. – mpez0

+0

그래서 시도한 코드를 게시 할 수 있습니까? – acutesoftware

+0

정렬의 일부에서 가능한 중복 : http://stackoverflow.com/questions/6295710/sorting-with-unix-tools-and-multiple-columnss. 'sort -t : -k + 3n'과'sort -t : -k + 4n'는 원하는대로 정렬 할 것입니다. 또한 중복을 건너 뛰려면'-u' 옵션을 추가하십시오. – pinepain

답변

0

나는 단지 추한 bash 해킹에 대해서만 생각할 수 있습니다. 그래서 대신 아름다운 파이썬이 필요하지 않을까요?

seen_col_3 = [] 
seen_col_4 = [] 

for line in s.split(): 
    cols = line.split(":") 
    if cols[3] in seen_col_3 and cols[4] in seen_col_4: 
    continue 
    seen_col_3.append(cols[3]) 
    seen_col_4.append(cols[4]) 
    print line 

지금은 도움이 될 수 있습니다 s

+0

목록의 설정 사용이 더 적절합니다. s.split()을 open (filename)으로 변경하면 문자열에서 파일로드가 제거됩니다. – Ante

0

awk으로 파일을 읽을 필요가있다. 당신은 표준 출력 한 경우 또는

awk -F':' -f<file_with_upper_code> <file> 

:

C3 저장 열 3에있는 모든 다른 값과 열의 C4 다른 값 4.

{ 
if(!($3 in C3) && !($4 in C4)) { print; } 
C3[$3] = 1; C4[$4] = 1; 
} 

에 의해 호출

program | awk -F':' -f<file_with_upper_code> 
0

첫 번째 변경 : 번째 열에서 네 번째 열 사이 다음 -k3sort 및 최종 변경 ### UPDATE

sed 's/^\([^:]*:[^:]*:[^:]*\):/\1###/' file | sort -t':' -k3 -u | sed 's/###/:/' 

:에에서, ### omething 같은 : 종류 --field 분리기와 sed Demo

관련 문제