【问题标题】:Apply arithmetic transformation on a text file column bash对文本文件列 bash 应用算术变换
【发布时间】:2017-02-19 15:14:41
【问题描述】:

我有包含多个列的大型csv 文本文件,我想使用column6column12 中的变量对column11 应用算术转换。

转换如下:

column11=column11*1000.*column12./(8.314*(column6+273.15))

其中.*./ 分别表示每行中的值的元素乘法和除法。

以下是输入文本文件的示例:

"2015-11-11 00:00:00.00",59841,0.327,3.275,1.89275,32.048,9,2435.477,2308.886,15.03365,31.2365067891251,98.7333,253
"2015-11-11 00:00:00.10",59842,0.086,3.56975,2.20325,32.10205,10,2433.668,2298.364,15.03292,31.2299567962211,98.7473,253
"2015-11-11 00:00:00.20",59843,0.26575,3.343,1.8285,32.06717,11,2433.833,2294.418,15.03119,31.2436473758837,98.72864,253
"2015-11-11 00:00:00.30",59844,-0.1915,3.28175,1.793,32.12122,12,2433.668,2280.608,15.02593,31.2410875853554,98.7333,253
"2015-11-11 00:00:00.40",59845,-0.20375,3.447,2.0135,32.08286,13,2433.833,2276.991,15.02812,31.2245602421307,98.73796,253

理想情况下,结果将保存到同一个文件中,并通过循环n 文件来重复该过程。

awkcut/pastebash 中的解决方案或一些想法会很有帮助。

【问题讨论】:

  • 你的数学表达式中的两个点是什么?
  • 删除点,将“column”替换为“$”并运行awk -F, '{...}1' file > outputfile,其中...是替换后的代码。
  • 看一眼任何 awk 手册页或任何 google 示例都可以回答这个问题。投入一点点努力。
  • @karakfa 谢谢。它起作用了: a_files=(path/to/files/*.csv) for ((i=0; i filenew"$i".csv done 如果你会接受将其移至答案部分。
  • 在 awk 中查找 FILENAME 属性/变量,你可以完全不用 bash 来完成

标签: bash recursion awk calculated-columns arithmetic-expressions


【解决方案1】:

你可以编写没有数组的主循环

 for f in path/to/files/*.csv
 do
    awk -F, '...' "$f" > "processed_$f"
 done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2014-02-28
    • 2018-07-28
    • 1970-01-01
    • 2014-10-01
    相关资源
    最近更新 更多