2016-06-19 2 views
-1

13 개의 필드가있는 1994 레코드가있는 데이터 세트가 있습니다. 다른 모든 레코드와 (연속 열에서) 병렬로 데이터 세트의 각 레코드 것조인을 사용하여 AWK의 레코드 간 교차

데이터 집합 외적의

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 
1 2 5 6 7 3 1 8 5 9 7 3 4 
2 4 . . . . . . . . . . . 
3 9 . . . . . . . . . . . 
. . . . . . . . . . . . . 
. . . . . . . . . . . . . 
1994 . . . . . . . . . . . . 

출력 : 나는 아래의 데이터 세트의 십자가 제품을 얻기 위해 노력하고 있어요 데이터 세트. 같은 다음과 같습니다 :

예상 출력
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 
. . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . 

내가 코드를 실행

: join file{,} -j99 나는 모두 외적의 기록을 다른 아래 하나 얻을. 10보다 작은 레코드에 동일한 코드를 적용하면 예상대로 출력됩니다. -j의 값을 99999와 9999999로 변경하려고 시도했지만 결과는 변경되지 않았습니다. 로

내가 출력을 얻을 : = 3,976,036 * 1994 1994하지만 기록이 다른 아래 하나로서 나는 그 행의 두 번 얻을 :

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 
. . . . . . . . . . . . . 
. . . . . . . . . . . . . 

그래서, 나는 1994 년 기록을 가지고, 내가 받아야합니다.

+1

13 개의 필드에도 동일하게 적용됩니다. 당신의 OS는 무엇입니까? – karakfa

+1

간결하고 테스트 가능한 샘플 입력 및 예상 출력이 포함 된 [mcve]를 표시하는 질문 [편집]. –

+1

나는 당신의 문제가 줄 결말 때문이라고 생각한다. Windows 환경에서 파일을 복사 한 경우'dos2unix file'을 실행하십시오 – karakfa

답변

2

교차 결합은 각 행마다 모든 행입니다. 따라서 각 줄 옆에 전체 파일을 인쇄하려면 awk을 지정하십시오. 뭔가 같은 것

#!/usr/bin/awk -f 
{ 
    cmd = "awk -v LINE='" $0 "' " "'{ printf(\"%s\\t%s\\n\", LINE, $0) }' " \ 
    FILENAME 
    system(cmd) 
} 

나는 결코 이것을하지 않을 것이다. 그것은 비효율적이며, awk를 호출하는 것은 O (N) 번이며, 많은 것을 얻지는 못합니다. 나는 SQLite로 파일을 가져오고 나에게 where 절과 명명 된 열을 준 교차 결합을 사용했습니다.

+0

실제로 두 사람 사이의 거리를 찾으려고 노력하고 있습니다. 즉, 첫 번째 레코드를 가져 와서 각 레코드와 비교하고 유클리드 거리를 계산하고 레코드 끝에 가장 가까운 레코드를 찾고 필드를 확인하면 $ 6이됩니다. 두 레코드가 같은 클래스 필드에 있으면 정확도에 +1을 더합니다. AWK를 사용하여 1nn의 정확도를 계산하려고합니다. 하지만 최선의 방법을 찾는 데 어려움을 겪고 있습니다. 이 링크를 확인하고 그것에 대해 알려줄 수있는 방법을 알려주십시오 : http://stackoverflow.com/questions/37897154/one-nearest-neighbour-using-awk –

관련 문제