代码之家  ›  专栏  ›  技术社区  ›  euphoria83

在Linux或Mac中,最好的文本处理工具是什么?[关闭]

  •  2
  • euphoria83  · 技术社区  · 14 年前

    我通常需要为我的研究做大量的文本处理,例如从所有行中删除最后一个令牌、从每行中提取前两个令牌、将每行拆分为令牌等。

    最好的方法是什么?我应该为此学习Perl吗?还是应该学习一些shell命令?主要关注的是速度。如果我需要为这些东西编写长代码,它就破坏了目标。

    编辑:

    我开始根据@mimismbrunnr的建议学习SED,已经可以做我需要做的事情了。但似乎人们更喜欢awk。所以,试试看。谢谢你的回复。

    5 回复  |  直到 10 年前
        1
  •  6
  •   ronys    14 年前

    Perl和Awk会想到,尽管Python会想到,如果你不想学习一种新语言的话。

    Perl是一种通用语言,awk更倾向于您所描述类型的文本处理。

        2
  •  3
  •   zellio    14 年前

    对于简单的蒸汽编辑来说,SED是一个很好的实用程序,它在大多数*nix框中都是标准的,但是对于任何比这更复杂的东西,我建议您使用Perl。曲线并没有那么糟糕,它对于编写大多数形式的常规文本解析都是很好的。可以找到很好的参考资料 here .

        3
  •  1
  •   jfs    14 年前
    #!/usr/bin/env python
    # process.py     
    import fileinput
    
    for line in fileinput.input(): # you could use `inplace=True` parameter here
        words = line.split() # e.g. split on white spaces
        all_except_last = words[:-1]
        print ' '.join(all_except_last)
        # or
        first_two = words[:2]
        print ' '.join(first_two)
    

    示例:

    $ echo a b c | python process.py
    $ ./process.py input.txt another.txt
    
        4
  •  1
  •   ghostdog74    14 年前

    *nix工具,如 awk/grep/tail/head/sed 等是很好的文件处理工具。如果您想在文件中搜索并处理模式,可以使用awk。对于大文件,可以使用grep+awk的组合。grep以其模式搜索速度和awk以其操纵文本的能力。关于SED,尤其是SED所做的,awk已经可以做到了,所以我发现使用SED进行文件处理是多余的。

    在处理文件的速度方面,awk通常与Perl或其他语言相当,有时甚至优于Perl或其他语言。

    另外,两个很好的工具可以快速获取文件的前后部分 tail head 。为了得到最后一行,您可以使用 .

        5
  •  0
  •   Giovanni Maggiorani    10 年前

    当然,最佳工具取决于要执行的任务。除了常见的*nix工具(如sed/awk等)和其他人引用的编程语言(perl、python)之外,目前对于文本处理,我需要原始数据格式不遵循严格的解析规则,但可能略有不同,我发现自己很好地使用了vim宏和vimscript函数w。我在Vim编辑器里面打电话。

    类似这样(对于未初始化的vim):您将处理函数(如txtprocessingtobedone1()写在一个文件script.vim上,将其源代码为:source script.vim,然后打开要编辑的文件,然后:

    :调用txtprocessingtobedone1()。

    在整个缓冲区上,或作为一次放炮操作,使用@:和@@键在现场重复。还可以使用:bufdo和:argdo同时处理多个缓冲区/文件。

    使用vimscript函数,您可以重复在常规编辑会话中要执行的所有任务(搜索模式、注册表项、替换、移动到、删除、扬克等),自动执行,并应用一些编程控制流(如果/那么)。

    类似的考虑也适用于其他高级脚本编辑器。