linux - 使用 (g)awk 使用日期和时间部分插入基于列的数据

标签 linux bash awk gawk

我有一些用分号分隔的数据。第一列显示固定时间步长。在第二列和第三列中,您可以看到部分不完整的数据:

输入.txt

14.09.2016:00:00:00;;100
14.09.2016:00:00:01;-1;
14.09.2016:00:00:02;0;300
14.09.2016:00:00:03;;
14.09.2016:00:00:04;;
14.09.2016:00:00:05;;
14.09.2016:00:00:06;4;
14.09.2016:00:00:07;;
14.09.2016:00:00:08;;
14.09.2016:00:00:09;16;307

如何使用 awk 或 gawk 对具有空值的数据点之间的每一列进行局部线性插值?:

输出.txt

14.09.2016:00:00:00;-2;100
14.09.2016:00:00:01;-1;200
14.09.2016:00:00:02;0;300
14.09.2016:00:00:03;1;301
14.09.2016:00:00:04;2;302
14.09.2016:00:00:05;3;303
14.09.2016:00:00:06;4;304
14.09.2016:00:00:07;8;305
14.09.2016:00:00:08;12;306
14.09.2016:00:00:09;16;307

已经有一个 gawk 脚本,它仅对此处可用的第一个和最后一个数据点上的每一列进行全局插值:Using awk to interpolate data column based in a data file with date and time

最佳答案

考虑到线性时间,数据中的值看起来不是线性的。如果您仍然想使用线性插值,则应该将数据分成几部分,例如使用 this对于每个部分并再次组合这些部分。找到正确的部分似乎是另一个问题,也许只是在数据列中查找值,一旦找到第二个值,在它后面剪切,然后再次从该特定行继续,如下所示(仅考虑第一个数据列($2):

14.09.2016:00:00:00;;100
14.09.2016:00:00:01;-1;
14.09.2016:00:00:02;0;300

14.09.2016:00:00:02;0;300
14.09.2016:00:00:03;;
14.09.2016:00:00:04;;
14.09.2016:00:00:05;;
14.09.2016:00:00:06;4;

14.09.2016:00:00:06;4;
14.09.2016:00:00:07;;
14.09.2016:00:00:08;;
14.09.2016:00:00:09;16;307

在考虑第二个数据列(最后一个字段,$3)时,您可以(必须)合并第二个和第三个部分。

另外,请阅读this .

关于linux - 使用 (g)awk 使用日期和时间部分插入基于列的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41634900/

相关文章:

linux - 在 Bash 中将 printf 传递给 ls?

regex - 使用来自 AWK 的外部正则表达式库

awk - 打印带有字段数据条件的行

Linux/unix sleep 命令 : How do I check the time remaining for queued processes in a task manager such as 'top' ?

linux - 尝试使用几个简单的 dmidecode 命令运行 shell 脚本,在执行脚本时它会在每个文件的末尾添加 '?'

c - 如何在linux上编译运行在windows上的c程序

linux - AWK 查找第一次出现的字符串并分配给变量进行比较

c++ - 缓冲区中的垃圾字符

linux - bash 脚本 Heredoc + FTP 错误

python - bash 相当于 Python 的 os.path.normpath?