2013-05-29 16 views
-2

我有3x3矩陣組。我如何使用awk或sed刪除相等的矩陣? 由於使用awk或sed找到相同的矩陣

實施例數據

1########################### 

303 

301 

100 

2########################### 

120 

001 

212 

3########################### 

230 

030 

210 

4########################### 

211 

211 

100 

5########################### 

111 

313 

300 

6########################### 

230 

330 

232 
+0

它無論什麼哈希前的是多少?因爲其中一些將要去。它真的必須是awk/sed,還是它可以是任何命令行工具?哦,你的例子不包含重複,對吧? –

+0

我有幾乎包含這些矩陣的10頁文檔。其中一些是相同的。在該示例中,沒有相同的矩陣 –

回答

1

更新:#3(相似度移除)

嘗試是這樣的:

awk -v OFS="\n" ' 
function swap(q) {w=a[q];a[q]=a[q+1];a[q+1]=w} 
function akin(t,x,y) {gsub(x,"#",t);gsub(y,x,t);gsub("#",y,t);return t} 
function look() { 
    k=a[1]"."a[2]"."a[3] 
    if(k in m) return 1 
    #for(j=0;j<6;++j) { # Make permutations 
     #k=a[1]"."a[2]"."a[3] 
     m[k] 
     m[akin(k,1,2)] 
     m[akin(k,1,3)] 
     m[akin(k,2,3)] 
     #swap(j%2+1) 
    #} 
    return 0 
} 
/^[[:space:]]*$/{next} # Skip empty lines 
{a[i++]=$0} # Store data 
i==4 { # Process data 
    i=0 
    if (look()) next; 
    print a[0], a[1], a[2], a[3] 
} 
' data 

它定義了兩個功能。 swap交換陣列中的兩個元素alook檢查是a是在m檢查哈希。如果不是,則將a添加到m(不考慮a[0])。

然後讀取四行並從矩陣行創建一個鍵。如果密鑰已經存在,則跳過。否則打印數據。如果空行具有重要性,則將"\n"添加到每行print行的末尾。

輸出:

1########################### 
303 
301 
100 
2########################### 
120 
001 
212 
3########################### 
230 
030 
210 
4########################### 
211 
211 
100 
5########################### 
111 
313 
300 
6########################### 
230 
330 
232 
+0

在矩陣中,可以將相互替換的矩陣和矩陣仍然相同。考慮到這點,你如何擴展代碼?謝謝 –

+0

如果更改了兩列,兩個矩陣不相等。例如。行列式可以是* -1。但我會考慮一下。 – TrueY

+0

感謝您的回答。這非常有用。你是對的。如果我們交換專欄,他們在我的情況下可以被認爲是平等的。 現在我需要這樣的代碼,如果行的總和相等,則兩個矩陣相等。謝謝 –