我在每个文件中有两个文件我有两列,我需要将 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
我在每个文件中有两个文件我有两列,我需要将 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
我不明白您是如何得出给定输出的。这可能会帮助您:
$ join -j 2 file1 file2
0 344 766
1 465 937
2 729 980
3 777 237
5 862 736
但是你从那里去哪里,你需要提供更多的细节。
为了扩展@glenn jackman的答案......也许是这样:
join -j 2 file1 file2 | awk '{if ($3>$2) print $3-$2; else print $2-$3}'
当第 2 列中存在匹配时,这将打印两列 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