2016-06-20 50 views
-1

當我在做file.txt文件記錄積> FILE2.TXT使用命令:刪除具有相同橫產品價值記錄AWK

join file1.txt{,} -j999 > file2.txt

我得到FILE1.TXT每個記錄所有的在FILE1.TXT記錄,如:

樣本數據集

r1 
r2 
r3 

我得到

r1 r1 
r1 r2 
r1 r3 
r2 r1 
r2 r2 
r2 r3 
r3 r1 
r3 r2 
r3 r3 

我不想R1,R1,R2 R2,記錄等等...

如果同時做跨產品的可能吧,我該如何預期的結果?如果沒有,我該如何處理加入FILE1.TXT後刪除記錄{,} -j 999

我試圖與另一awk命令:

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

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

因爲我有每個記錄1的序列號, 2,3,... 我已經FILE2.TXT爲:

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 

我簡單地比較序列號,如果他們不相等打印的記錄。 但我得到意外的結果,如:

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

你可以看到它之前$ 1 = $ 13跳過所有記錄!所以有行缺少這樣的:

2 1 
3 1 
3 2 

它應該只跳過那些圖案R1,R1,R2 R2,記錄...

更新

image

1日和13日col是序列號。

+0

請更新呈現出[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條記錄。而且我總共有26個cols,其中r1和r2各有16個cols並且它花費了很多時間。有沒有比你提供的有效的方式去除?就像比較$ i == $(i + 12)。如果相等,那麼在每條記錄中,如果記錄具有與未來13個字段相匹配的前13個字段。刪除線?或者什麼也不打印,因此被刪除 –

+0

@MurlidharFichadia:兩列的數字都是固定的嗎?像col 1和10? – Inian

+0

@Inian請檢查圖像 –

相關問題