2014-10-02 86 views
0

好日子,AWK和矩陣處理

我不知道如何處理(在AWK)方形對稱矩陣的事:

  1. 標識行,只有零。
  2. 刪除該行及其對稱列。
  3. 打印結果矩陣。

輸入

1234567 
xabcdefg 
1a0101101 
2b1010001 
3c0101001 
4d1010101 
5e1001000 
6f0000000 
7g1111000 

預計輸出第六行和列刪除

123457 
xabcdeg 
1a010111 
2b101001 
3c010101 
4d101011 
5e100100 
7g111100 

預先感謝任何線索

+0

是1234..7和ABCDEFG。在輸入文件? – Kent 2014-10-02 22:31:58

+0

nope,它只是用字母或數字來標識每一行和列,如你所願,用字母或數字 – 2014-10-02 22:36:52

回答

2

此行應工作:

awk 'BEGIN{FS=OFS=""}NR==FNR{if(/^0+$/)z[NR];next} 
         !(FNR in z){for(x in z)$x="";print}' file file 

測試:

kent$ cat f 
0101101 
1010001 
0101001 
1010101 
1001000 
0000000 
1111000 

kent$ awk 'BEGIN{FS=OFS=""}NR==FNR{if(/^0+$/)z[NR];next}!(FNR in z){for(x in z)$x="";print}' f f 
010111 
101001 
010101 
101011 
100100 
111100 

它適用於多個 「全零」 太行:

kent$ cat f 
00001 
00000 
00000 
00000 
10000 

kent$ awk 'BEGIN{FS=OFS=""}NR==FNR{if(/^0+$/)z[NR];next}!(FNR in z){for(x in z)$x="";print}' f f 
01 
10 
+0

非常感謝,它工作順利。 :D肯特,如果我問你它是如何工作的,它會太多嗎? (我只是想學習)。預先感謝。 (: – 2014-10-02 22:49:02

+1

@Alejandro我讀了兩次輸入文件,第一次是定位全零行索引(行號),第二次打印矩陣,跳過找到的行號也列號 – Kent 2014-10-02 22:50:57

+0

順便說一句@Kent ,希望現在還不遲,問你:代碼如何顯示,還有NR刪除了嗎?先謝謝 – 2014-10-02 23:07:31

0
$ awk '{row[NR]=$0} $0=='0000000' {bad=NR} END{for (i=1;i<=NR;i=i+1+(i==bad-1)) {print substr(row[i],1,bad-1) substr(row[i],bad+1)}}' input 
010111 
101001 
010101 
101011 
100100 
111100 
+0

Thank John1024。但是,我更喜歡Kent的一個,它比較一般,有一個美好的一天(: – 2014-10-02 22:49:43