gpt4 book ai didi

Unix:在两个时间序列中找到所有具有时间戳的行?

转载 作者:行者123 更新时间:2023-12-01 09:49:10 25 4
gpt4 key购买 nike

我有时间序列数据,我想在其中找到所有相互匹配的行,但值可能不同(匹配到第一个选项卡)!您可以在下面看到 vimdiff,我想在其中摆脱仅出现在其他时间序列上的日子。

我正在寻找最简单的 unix 工具来完成这项工作!

enter image description here

enter image description here

时间序列herehere .

简单示例

Input

Left file                            Right File    
------------------------ ------------------------
10-Apr-00 00:00 0 || 10-Apr-00 00:00 7
20-Apr 00 00:00 7 || 21-Apr-00 00:00 3

Output

Left file                           Right File    
------------------------ ------------------------
10-Apr-00 00:00 0 || 10-Apr-00 00:00 7

最佳答案

让我们考虑这些示例输入文件:

$ cat file1
10-Apr-00 00:00 0
20-Apr-00 00:00 7
$ cat file2
10-Apr-00 00:00 7
21-Apr-00 00:00 3

将具有相同日期的行合并在一起:

$ awk 'NR==FNR{a[$1]=$0;next;} {if ($1 in a) print a[$1]"\t||\t"$0;}' file1 file2
10-Apr-00 00:00 0 || 10-Apr-00 00:00 7

说明

  • NR==FNR{a[$1]=$0;next;}

    NR 是到目前为止读取的行数,FNR 是到目前为止从当前文件读取的行数。所以,当 NR==FNR 时,我们仍然在读取第一个文件。如果是这样,将整行 $0 保存在第一个字段 $1 的键下的数组 a 中,这是日期。然后,跳过其余命令并跳转到行。

  • if ($1 in a) 打印 a[$1]"\t||\t"$0

    如果我们到达这里,那么我们正在读取第二个文件,file2。如果这一行的第一个字段$1是我们已经在file1中看到的日期,换句话说,如果$1 in a,那么将此行与 file1 中的相应行一起打印出来。两行之间用tab-||-tab分隔。

替代输出

如果只想从file2中选择日期也在file1中的行,那么代码可以简化:

$ awk 'NR==FNR{a[$1]++;next;} {if ($1 in a) print;}' file1 file2
10-Apr-00 00:00 7

或者,更简单:

$ awk 'NR==FNR{a[$1]++;next;} ($1 in a)' file1 file2
10-Apr-00 00:00 7

关于Unix:在两个时间序列中找到所有具有时间戳的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26964476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com