0

我在每个文件中有两个文件我有两列,我需要将 file1 的第二列的第一个值与 file2 的第二列的每个值匹配,如果它们相等,我需要减去第一列的匹配值彼此,之后我需要将两个文件中的第一列合并到一个文件中,但是如果两个值不匹配,则这两列应该彼此相邻什么都不做

文件 1

344  0
465  1
729  2
777  3
676  4
862  5

文件2

766  0
937  1
980  2
237  3
736  5

例子

422
208
251
4

3 回答 3

1

我不明白您是如何得出给定输出的。这可能会帮助您:

$ join -j 2 file1 file2
0 344 766
1 465 937
2 729 980
3 777 237
5 862 736

但是你从那里去哪里,你需要提供更多的细节。

于 2013-07-05T20:01:46.127 回答
1

为了扩展@glenn jackman的答案......也许是这样:

join -j 2 file1 file2 | awk '{if ($3>$2) print $3-$2; else print $2-$3}'

当第 2 列中存在匹配时,这将打印两列 1 之间的绝对差异。但它与您的预期输出不匹配,除了第一个值之外,它似乎与您的输入没有明显的关系,似乎与您的问题相匹配......

于 2013-07-05T21:01:43.857 回答
1

这可能会有所帮助:

awk '
BEGIN { printf "%s\t%s\t%s\n","File1","File2","Difference(f2-f1)" }
NR==FNR { a[$2]=$1; next }
{ printf "%d\t%d\t%d\n",a[$2],$1,$1-a[$2] }' file1 file2

输出:

File1   File2   Difference(f2-f1)
344     766      422
465     937      472
729     980      251
777     237     -540
862     736     -126
于 2013-07-05T21:53:11.533 回答