【发布时间】:2015-04-28 00:14:15
【问题描述】:
大家好,我有两个文件,每个文件都有 N 列和 M 行。
文件1
1 2 4 6 8
20 4 8 10 12
15 5 7 9 11
文件2
1 a1 b1 c5 d1
2 a1 b2 c4 d2
3 a2 b3 c3 d3
19 a3 b4 c2 d4
14 a4 b5 c1 d5
我需要的是在第 1 列中搜索最接近的值,并在输出中打印特定列。所以例如输出应该是:
文件3
1 2 4 6 8
1 a1 b1 c5 d1
20 4 8 10 12
19 a3 b4 c2 d4
15 5 7 9 11
14 a4 b5 c1 d5
由于 1 = 1,19 最接近 20,14 最接近 15,因此输出是那些行。 如何在 awk 或任何其他工具中做到这一点?
救命!
这是我到现在为止的:
echo "ARGIND == 1 {
s1[\$1]=\$1;
s2[\$1]=\$2;
s3[\$1]=\$3;
s4[\$1]=\$4;
s5[\$1]=\$5;
}
ARGIND == 2 {
bestdiff=-1;
for (v in s1)
if (bestdiff < 0 || (v-\$1)**2 <= bestdiff)
{
s11=s1[v];
s12=s2[v];
s13=s3[v];
s14=s4[v];
s15=s5[v];
bestdiff=(v-\$1)**2;
if (bestdiff < 2){
print \$0
print s11,s12,s13,s14,s15}}">diff.awk
awk -f diff.awk file2 file1
输出:
1 2 4 6 8
1 a1 b1 c5 d1
20 4 8 10 12
19 a3 b4 c2 d4
15 5 7 9 1
14 a4 b5 c1 d5
1 2
1 1
14 15
我不知道为什么最后三行。
【问题讨论】:
-
当然需要输入这两个文件。由于您使用 awk 进行标记,您可能已经开始编写代码。请分享吧!
-
是的,我错误地表达了自己。但我仍然没有什么可分享的。有什么想法吗?
-
两个文件的行数一样吗? “最接近”是什么意思?如果我们在第一个文件中只有一行的值为“30”,而第二个文件中的值为“40”,是否足够接近?
-
@AndreySabitov 行数不一样,是的,如果没有另一个足够接近的话,30 是最接近 40 的。