AWK需要读取一个文件和另一个文件

AWK需要读取一个文件和另一个文件,awk,Awk,我需要读取一个文件并存储第1列和第4列,使用第1列查找第二个文件并存储第二个文件的第4列,然后在文件01的第04列和文件2的第04列之间执行减法。你能帮助我吗?第04列以秒为单位 这两个文件包含以下标题 ID, origin, destination, time 我需要获得文件1中的第一个ID,然后查看文件2 例如,从文件1中获取ID 37并查看文件2。当我找到它时,我需要从文件2中的ID 37时间中减去第一个文件中的ID 37时间 我需要减法次数之和 想知道awk是否是正确的解决方案 文件0

我需要读取一个文件并存储第1列和第4列,使用第1列查找第二个文件并存储第二个文件的第4列,然后在文件01的第04列和文件2的第04列之间执行减法。你能帮助我吗?第04列以秒为单位


这两个文件包含以下标题

ID, origin, destination, time
我需要获得文件1中的第一个ID,然后查看文件2

例如,从文件1中获取ID 37并查看文件2。当我找到它时,我需要从文件2中的ID 37时间中减去第一个文件中的ID 37时间

我需要减法次数之和

想知道awk是否是正确的解决方案

文件01

37 33 44 602.04
39 32 13 602.20
文件02

37 44 44 602.184852493
39 13 13 602.263704529
输出

0,2
f1.col4-f2.col4:

awk 'NR==FNR{a[$1]=$4;next}{$4=a[$1]?a[$1]-$4:$4}7' f1 f2 
输出如下所示:

37 44 44 -0.144852
39 13 13 -0.0637045
41 44 44 -0.0642587
44 13 13 -0.0196296
45 44 44 -0.0145357
47 13 13 -0.014259
如果您想要f2.col4-f1.col4,请在上述代码中使用
$4-a[$1]
,您将获得:

37 44 44 0.144852
39 13 13 0.0637045
41 44 44 0.0642587
44 13 13 0.0196296
45 44 44 0.0145357
47 13 13 0.0142594

一种可能的考虑是将任务分成两部分-基于这一共同字段加入两个文件,然后进行数学运算。它避免了一次将一个文件中的每一行的一部分存储在内存中,如果它们很大,这就很好了

以下假设a)根据第一列对文件进行排序,b)使用选项卡分隔列:

$ join -j1 -o '1.4 2.4' file1.txt file2.txt | awk '{total+=$2-$1} END {print total}'
0.208557
join命令合并公共行上的两个文件,并只打印出要减去的数字,这些数字通过管道传输到awk进行实际计算

编辑:或awk中的全部:

$ awk 'NR==FNR { f1[$1]=$4; next }
       $1 in f1 { total += $4 - f1[$1] }
       END { print total }' file1.txt file2.txt
0.208557

这会将第一个文件的id和时间存储在关联数组中,然后对于文件2中的每一行,如果该行的id存在于数组中,则将时间差添加到总数中。最后,在阅读所有文件后打印总数。

嘿,你能尝试改进你的问题吗?我什么都不懂。请给出这两个示例输入文件,显示您的预期输出。这两个文件包含以下标题。ID、来源、目的地、我需要在文件1中获取第一个ID的时间,并在文件2中查找。例如,从文件1中获取ID 37并查看文件2。当我找到它时,我需要从文件2中的ID37时间中减去第一个文件中的ID37时间,所以每个文件的标题行是逗号分隔的或逗号+空格分隔的,但是每个文件中的其余行只是空格分隔的,对吗?为什么
0,2
是输入中减去这些时间的预期输出?这两个文件包含以下标题。ID、来源、目的地、我需要在文件1中获取第一个ID的时间,并在文件2中查找。例如,从文件1中获取ID 37并查看文件2。当我找到它时,我需要从文件2中的ID37时间中减去第一个文件中的ID37时间。输出仅仅是subtraction@DaniloRenatoDeAssis对所有要求提出疑问,而不是评论。我们回答问题是为了帮忙,不是玩电脑游戏,通过一个阶段,你添加了一些东西,然后我们尝试通过新阶段…对不起。我测试了你发送的代码,它真的做了时间的减法。现在我需要做每一个减法的和,因为我最后只需要差的和。嗨,这就是为我解决的$awk'NR==FNR{f1[$1]=$4;下一个}$1在f1{total+=$4-f1[$1]}end{print total}file1.txt file2.txt 0.208557中