gpt4 book ai didi

csv - 使用 awk 从 5gb 文件中输出数据

转载 作者:行者123 更新时间:2023-12-04 18:41:27 26 4
gpt4 key购买 nike

我有一个包含大约 300 列的 csv 文件。

我正在使用 awk 创建此文件的子集,其中第 24 列是“CA”。

数据示例:

enter image description here

这是我正在尝试的:

awk -F "," '{if($24~/CA/)print}' myfile.csv > subset.csv

大约 10 分钟后,子集文件增长到 400 mb,然后我杀死了它,因为这太慢了。

我怎样才能加快速度? 也许是 sed/awk 的组合?

\

最佳答案

tl;博士:

  • awk实现在性能上可能会有很大差异。
  • 在这种特殊情况下,查看是否使用 gawk (GNU awk) 有帮助。

  • Ubuntu 自带 mawk默认 awk ,通常被认为比 gawk 更快.然而,在手头的情况下, gawk明显更快(与线长有关?),至少基于我运行的以下简化测试
    在 Ubuntu 14.04 上的 VM 中,在 1-GB 文件中,长度为 2 的 300 列。

    测试还包括等效的 sedgrep命令。

    希望它们至少提供一种比较性能的感觉。

    测试脚本:
    #!/bin/bash

    # Pass in test file
    f=$1

    # Suppress stdout
    exec 1>/dev/null

    awkProg='$24=="CA"'

    echo $'\n\n\t'" $(mawk -W version 2>&1 | head -1)" >&2
    time mawk -F, "$awkProg" "$f"

    echo $'\n\n\t'" $(gawk --version 2>&1 | head -1)" >&2
    time gawk -F, "$awkProg" "$f"

    sedProg='/^([^,]+,){23}CA,/p'

    echo $'\n\n\t'" $(sed --version 2>&1 | head -1)" >&2
    time sed -En "$sedProg" "$f"

    grepProg='^([^,]+,){23}CA,'

    echo $'\n\n\t'" $(grep --version 2>&1 | head -1)" >&2
    time grep -E "$grepProg" "$f"

    结果:
         mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

    real 0m11.341s
    user 0m4.780s
    sys 0m6.464s


    GNU Awk 4.0.1

    real 0m3.560s
    user 0m0.788s
    sys 0m2.716s


    sed (GNU sed) 4.2.2

    real 0m9.579s
    user 0m4.016s
    sys 0m5.504s


    grep (GNU grep) 2.16

    real 0m50.009s
    user 0m42.040s
    sys 0m7.896s

    关于csv - 使用 awk 从 5gb 文件中输出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687778/

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