2016-06-20 6 views
-1

에 같은 외적 값 레코드를 제거명령을 사용하여 file2.txt> AWK

샘플 데이터 세트

r1 
r2 
r3 

나는

를 얻을 : 같은은 File2.txt의 레코드
r1 r1 
r1 r2 
r1 r3 
r2 r1 
r2 r2 
r2 r3 
r3 r1 
r3 r2 
r3 r3 

내가 ... 등등 R1, R1, R2, R2, 기록 등을 싶지 않는

외적을하는 동안 그것의 가능한 권리는 어떻게이 결과를 예상 얻을 경우? ,

if($i!=$(i+12)){print $0;} and 

if($1!=$13){print $0;} 

나는 각 레코드 1의 일련 번호를 가지고 있기 때문에 :하지 않을 경우 어떻게은 File2.txt 가입 처리 한 후 레코드를 제거 할 {} 나는 다른 awk 명령과 함께이 시도 999

을 -j 그들은 레코드가 동일한 인쇄하지 않은 경우 단순히 일련 번호를 비교

c1 c13 --> column 1 and column 13 
1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
2 4 
3 1 
3 2 
3 3 
3 4 

과 : 2,3, ... 나는대로 file2.txt있다. ! 당신은 그것을 $ 1 = $ (13) 전에 모든 레코드를 건너 뛰고 볼 수 있습니다

1 2 
1 3 
1 4 
2 3 
2 4 
3 4 

: 는하지만 같은 바람직하지 않은 결과를 얻을.

2 1 
3 1 
3 2 

단지 패턴 R1, R1, R2, R2,에있는 기록을 건너 뛰어야

업데이트

image

1, 13 ... :과 같이 누락 된 행이 있습니다 col은 일련 번호입니다. 두 파일을 통해

+0

A [mcve] 보여주는 업데이트하시기 바랍니다 -와 텍스트가 아닌 이미지를. 그렇지 않으면 솔루션에서 작업하기가 어렵습니다. – fedorqui

답변

1

다만 루프 : 처음 읽을 때

awk 'FNR==NR {a[FNR]=$0; next} 
    BEGINFILE{lines=NR-FNR} 
    { 
     for (i=1;i<=lines;i++) { 
      if (i!=FNR) print $0, a[i] 
     } 
    }' file file 

a[line_number]=value_on_that_line 어레이에 데이터를 저장한다. 그런 다음 두 번째로 읽을 때 줄 번호가 색인과 일치 할 때를 제외하고 모든 쌍을 인쇄하는 줄 수를 반복합니다. 즉 줄 번호가 같은 줄에 매핑 될 때입니다. R1, R2하여 주어진 파일에 대한

는, R3는 반환

$ awk 'FNR==NR {a[FNR]=$0; next} BEGINFILE{lines=NR-FNR} {for (i=1;i<=lines;i++) { if (i!=FNR) print $0, a[i]}}' f f 
r1 r2 
r1 r3 
r2 r1 
r2 r3 
r3 r1 
r3 r2 
+0

나는 노력하고 있지만, 4,000,000 개의 레코드가 있습니다. 그리고 나는 r1과 r2가 각각 16 cols를 갖는 총 26 칼럼을 가지고 있습니다. 그리고 그것은 많은 시간을 소비하고 있습니다. 당신이 제공 한 것보다 제거하는 효율적인 방법이 있습니까? 그냥 $ i == $ (i + 12)와 비교하면됩니다. 같으면 각 레코드에 다음 13 필드와 일치하는 처음 13 개의 필드가 있는지 여부를 확인합니다. 그 선을 제거 하시겠습니까? 또는 아무것도 인쇄하지 않도록 제거 했습니까? –

+0

@MurlidharFichadia : 열 번호가 둘 다 고정되어 있습니까? col 1과 10을 좋아합니까? – Inian

+0

@Inian –

관련 문제