2015-04-19 64 views
0

我在兩個文件中尋找共同元素,或者矩陣的哪一行中來自給定行的元素最多。我至今所瞭解的是如何比較領域。我收到在相同的字段數中保持相同值的行。 但是,我怎樣才能打開搜索到其他領域的數字?awk找到矩陣中列表最接近的匹配

awk 'NR==FNR{a[$1];next}$1 in a{print $1" "FNR}' file1 file2 
104 3 

預期輸出: 104 3 111 4 117 2 134 2 148 - 156 4 166 4 176 3 186 - 198 1 221 6 236 - 最佳匹配行4 3共同的元件。

file 1 
104 111 117 134 148 156 166 176 186 198 221 236 

file 2 
102 108 116 124 132 141 151 162 173 185 198 211 
103 109 117 125 134 143 153 163 175 187 200 213 
104 110 118 126 135 144 154 165 176 188 201 215 
105 111 119 127 136 145 156 166 178 190 203 217 
106 112 120 128 137 147 157 168 179 192 205 219 
107 113 121 130 139 148 158 169 181 193 207 221 
108 114 122 131 140 150 160 171 183 195 208 200 
+1

後的預期輸出與樣品輸入文件一起去,爲什麼無論在哪個單元(ROW和COL號)兩個文件都被比較的解釋和匹配,以產生輸出 –

+0

預計輸出一起: 104 3 111 4 117 2 134 2 148 - 156 4 166 4 176 3 186 - 198 1 221 6 236 - 最佳匹配第4行,共有3個元素。 –

回答

1

這種解決方案假定1)file1的包含在所提供的示例中示出的唯一值和2)僅存在一個排線file2中頂部。

awk -v string=$(cat file1 | tr " " ",") \ 
'{split(string,array,","); cnt=0; 
for(i in array) {for(j=1;j<=NF;j++) if(array[i]==$j) cnt++}; 
if(cnt>cntmax) {cntmax=cnt; NRmax=NR}} END{print NRmax}' file2 
4