-2

3x3 マトリックス グループがあります。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
4

1 に答える 1

1

UPDATED #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

2 つの関数を定義します。swapは配列内の 2 つの要素を交換しalookチェックはaチェックmハッシュにあります。aそうでない場合は、すべての順列をm(a[0]は考慮されません)に追加します。

次に、4 行を読み取り、行列の行からキーを作成します。キーがすでに存在する場合はスキップします。それ以外の場合は、データを印刷します。空行が重要な場合は"\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
于 2013-05-29T21:43:13.837 に答える