将数学函数应用于大文件中的每一行

马斯顿

我有一个大文件,该文件列出了一个长列unix乘以每行一个值,以0.01s的间隔递增。对于一天的数据,总计达864万行。

135699840000
135699840001
135699840002
135699840003
135699840004

我想在此文件的每一行上运行一条命令,该命令计算每行的序列日期号-来自matlab用于时间的参考年01/01/0000的天数计数器。

735235.0000000000
735235.0000001157
735235.0000002314
735235.0000003472
735235.0000004629

我是编码的新手,但是设法使用while循环使它开始工作。但是,这效率低下,需要花费数小时才能运行。

while read epochtimerange; do
echo "scale=10; (($epochtimerange/(100*86400))+719529)" |bc
done < epochtimerangetmp.txt > serialdaterangetmp.txt

我认为必须有一种使用awk运行此方法的方法,但是我无法使其正常工作。重要的是,我必须在输出中保持小数点后10位的精度。

有人可以帮我吗?谢谢。

通配符

简单的方法:ex用于修改各行,并通过传递整个缓冲区(修改后的文件)bc然后打印修改后的版本。

printf '%s\n' '%s:.*:&/8640000+719529:' 0a scale=10 . '%!bc' %p 'q!' | ex file.txt

在您的样本文件上输出:

735235.0000000000
735235.0000001157
735235.0000002314
735235.0000003472
735235.0000004629

或者保存更改,而不仅仅是打印更改:

printf '%s\n' '%s:.*:&/8640000+719529:' 0a scale=10 . '%!bc' x | ex file.txt

解释:

要查看传递给exprintf命令,请自己运行命令:

$ printf '%s\n' '%s:.*:&/8640000+719529:' 0a scale=10 . '%!bc' %p 'q!'
%s:.*:&/8640000+719529:
0a
scale=10
.
%!bc
%p
q!

现在让我们将它们分解为ex命令。第一个比较复杂,因此我将特别地解释格式:

%s:.*:&/8640000+719529:
%  - For every line of the buffer (file)
 s  - Run a substitute command
  :  - Using ':' as the regex delimiter
   .*  - Match each entire line
     :  - and replace with
      &  - The entire line, followed by
       /8640000+719529  - this text
                      :  - End command

0a 表示“在第0行之后添加文本”,换句话说,位于缓冲区(文件)的开头。

文本scale=10是要附加的文字文本。

.一行由本身结束“追加”命令。

该命令%!bc将整个缓冲区的内容作为标准输入传递给外部命令bc,并用产生的输出替换整个缓冲区。

%p手段来打印整个缓冲液(标准输出)。

q! 表示不保存更改即退出。


如果您有一个非常大的文件(几千万行),这显然会带来麻烦。我已经研究了这种使用的可能解决方案,ex并且有一些方法可以实现,但是我最终放弃了该方法,转而使用了一种简单得多的方法,该方法仍然仅使用POSIX指定的工具

使用split分割文件分割成块,然后运行对每个块和先前指定命令cat的输出结果一起:

split -l 1000000 -a 3 file.txt myprefix.
for f in myprefix.???; do
  printf '%s\n' '%s:.*:&/8640000+719529:' 0a scale=10 . '%!bc' %p 'q!' |
    ex "$f"
done > myoutputfile.txt
rm myprefix.???

split命令在此处用于将file.txt每个偶数行长的块分割成几百万行(当然,其余部分也将放入文件中)。由于-a 3已指定,因此块上的后缀将为3个字符长。myprefix.aaamyprefix.aab等等。

然后,可以单独处理每个文件ex,而无需保存更改,因为我们将整个循环的输出重定向到myoutputfile.txt(然后为了整洁而删除了块文件)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

如何将函数应用于熊猫中每一行的对象属性

来自分类Dev

如何将函数应用于SparkR中的每一行?

来自分类Dev

将功能应用于文件中每一行的特定表达式

来自分类Dev

R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

来自分类Dev

将功能分别应用于每一行

来自分类Dev

将多个函数应用于numpy数组的每一行

来自分类Dev

Pandas_udf 问题:将函数应用于数据为 ArrayType 的每一行

来自分类Dev

如何将CDB调试器命令应用于文件中的每一行?

来自分类Dev

矩阵函数是应用于整个矩阵还是Fortran中的每一行?

来自分类Dev

将自定义函数应用于r中的每一行

来自分类Dev

创建评分函数并将其应用于R中的每一行

来自分类Dev

Python Numpy将旋转矩阵应用于数组中的每一行

来自分类Dev

在列中以列为参数将binom_test应用于每一行?

来自分类Dev

使用EPPlus将公式应用于每一行的两列中的值相乘

来自分类Dev

将 repmat 应用于具有不同输入的 Matlab 中矩阵的每一行

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

R将函数应用于数据框的每一行,将结果存储在同一数据框的新列中

来自分类Dev

创建一个将方程式应用于每一行的用户定义函数

来自分类Dev

通过将函数应用于数据框的每一行来创建具有命名值的列表

来自分类Dev

Nodejs - 如何将函数应用于两个流的每一行组合?

来自分类Dev

将自定义函数应用于R中数据帧中每一行的两列

来自分类Dev

如何仅将函数应用于dplyr中组的第一行?

来自分类Dev

将python日志记录格式应用于包含新行的消息的每一行

来自分类Dev

numpy-将聚合应用于数组的每一行

来自分类Dev

将功能应用于Spark DataFrame的每一行

来自分类Dev

如何通过R下的for循环将Wilcoxon测试应用于矩阵的每一行

Related 相关文章

  1. 1

    将函数应用于ndarray的每一行

  2. 2

    将函数应用于ndarray的每一行

  3. 3

    如何将函数应用于熊猫中每一行的对象属性

  4. 4

    如何将函数应用于SparkR中的每一行?

  5. 5

    将功能应用于文件中每一行的特定表达式

  6. 6

    R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

  7. 7

    将功能分别应用于每一行

  8. 8

    将多个函数应用于numpy数组的每一行

  9. 9

    Pandas_udf 问题:将函数应用于数据为 ArrayType 的每一行

  10. 10

    如何将CDB调试器命令应用于文件中的每一行?

  11. 11

    矩阵函数是应用于整个矩阵还是Fortran中的每一行?

  12. 12

    将自定义函数应用于r中的每一行

  13. 13

    创建评分函数并将其应用于R中的每一行

  14. 14

    Python Numpy将旋转矩阵应用于数组中的每一行

  15. 15

    在列中以列为参数将binom_test应用于每一行?

  16. 16

    使用EPPlus将公式应用于每一行的两列中的值相乘

  17. 17

    将 repmat 应用于具有不同输入的 Matlab 中矩阵的每一行

  18. 18

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  19. 19

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  20. 20

    R将函数应用于数据框的每一行,将结果存储在同一数据框的新列中

  21. 21

    创建一个将方程式应用于每一行的用户定义函数

  22. 22

    通过将函数应用于数据框的每一行来创建具有命名值的列表

  23. 23

    Nodejs - 如何将函数应用于两个流的每一行组合?

  24. 24

    将自定义函数应用于R中数据帧中每一行的两列

  25. 25

    如何仅将函数应用于dplyr中组的第一行?

  26. 26

    将python日志记录格式应用于包含新行的消息的每一行

  27. 27

    numpy-将聚合应用于数组的每一行

  28. 28

    将功能应用于Spark DataFrame的每一行

  29. 29

    如何通过R下的for循环将Wilcoxon测试应用于矩阵的每一行

热门标签

归档