【问题标题】:selecting data from a big file从大文件中选择数据
【发布时间】:2013-04-04 16:54:00
【问题描述】:

以下 grep 语句按预期工作。 但是如果文件太大(40GB)会花费很多时间

grep '^INSERT' test.txt > new.txt

1) 有没有其他方法可以快速从该文件中获取所有“INSERT”语句的列表?

2) 是否有任何命令可以快速从该文件中删除前 100 行?

【问题讨论】:

  • 您的语言环境是什么? echo $LANG
  • 您的问题 1 和 2 是针对同一任务还是两个任务?
  • # local is # en_US.UTF-8 ## 问题 1 和 2 相同的任务。我的 INSERT 语句在前 100 行之后开始

标签: sed awk grep cut


【解决方案1】:
 sed -n '1,100\!{/^INSERT/p}' test.txt > new.txt &

您可以使用“&”将进程发送到后台并继续您的工作。使用 ps 命令检查后台进程的状态。

【讨论】:

    【解决方案2】:

    您可以进行字符串比较而不是正则表达式匹配,但使用 40GB 将不会有任何神奇的命令,您仍然需要检查每一行:

    $ awk '$1=="INSERT"' test.txt > new.txt  
    

    至于第二个问题使用sed:

    $ sed -i '1,100{d;q}' test.txt
    

    【讨论】:

      【解决方案3】:

      您是在主轴磁盘上执行此操作吗?如果是这样,请尝试使用 SSD。或者,如果你负担得起的话,可以买一台有足够内存的机器来容纳整个文件。

      【讨论】:

        【解决方案4】:

        第一次操作应该会更快:

        LANG=en_US grep '^INSERT' test.txt > new.txt
        

        (假设您当前使用的语言环境支持UTF-8

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-09
          • 1970-01-01
          • 1970-01-01
          • 2011-08-03
          • 2019-05-06
          • 1970-01-01
          • 2018-01-26
          相关资源
          最近更新 更多