【问题标题】:Parallelizing awk script并行化 awk 脚本
【发布时间】:2015-08-30 03:59:28
【问题描述】:

我正在尝试并行化以下脚本:

$ awk -F , '$3 > 25 && $3 < 26' data_temp.csv | head

... 我得到了想要的输出。 (cat data_temp.csv | awk -F , '$3 &gt; 25 &amp;&amp; $3 &lt; 26' | head 也一样。)到目前为止我的尝试:

$ parallel "awk -F , '$3 > 25 && $3 < 26' data_temp.csv" | head
parallel: Warning: Input is read from the terminal.
parallel: Warning: Only experts do this on purpose. Press CTRL-D to exit.

$ cat data_temp.csv | parallel --pipe awk -F , \'$3 > 25 && $3 < 26\' | awk -F , '$3 > 25 && $3 < 26' | head
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
# repeated for what looks like every line

【问题讨论】:

    标签: bash awk parallel-processing gnu-parallel


    【解决方案1】:

    未经测试:

    cat data_temp.csv |
      parallel -k -q --block 100M --pipe awk -F , '$3 > 25 && $3 < 26' |
      head
    parallel -k -q --block 100M --pipepart -a data_temp.csv awk -F , '$3 > 25 && $3 < 26' |
      head
    

    【讨论】:

    • 如果你的 CPU 受限,第二个会更快。如果您受磁盘 I/O 限制,则只有您的测量结果才能说明问题。
    • 它是在所有可用内核之间平均分配任务,还是我必须指定要使用多少个内核?此外,在另一个线程中(关于如何处理此类任务的一般建议),有人建议将文件分成几个文件,然后与 awk 并行处理这些文件。该方法与您编写的代码之间是否有区别(即您的代码是否自动执行此操作)?我可以离线分割文件(在操作之前)。另外,如果我的文件是 500 MB,并且我有 8 个内核,那么为块做 60 GB 而不是 100 GB 是否有意义?
    • GNU Parallel 平等地传播它。使用如此小的块大小以使每个核心至少获得 10 个块是一个好主意。例如。 8 核 80 GB 最多应该使用 --block 1G。如果您的文件是 8 核上的 800M,则一个好的值是 --block 10M。 --pipepart 非常高效,如果拆分成较小的文件只会浪费时间,所以不要这样做。但总的来说,我会鼓励你尝试不同的价值观和衡量标准:计算机是复杂的系统和 YMMV。
    • 谢谢!显然,我公司的服务器上有 16 个内核,所以运行速度很快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2021-11-11
    • 2018-08-28
    • 2019-01-11
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多