awk在矩阵中找到列表的最接近匹配

时间:2015-04-19 08:12:48

标签: bash matrix awk

我在两个文件中查找公共元素,或者矩阵的哪一行具有来自给定行的最多元素。到目前为止我所理解的是如何比较领域。我收到在同一fieldname中保持相同值的行。 但是如何将搜索打开到其他字段编号?

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 个答案:

答案 0 :(得分: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