Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Linux或Mac中,什么是进行文本处理的最佳工具?_Linux_Text Processing - Fatal编程技术网

什么';在Linux或Mac中,什么是进行文本处理的最佳工具?

什么';在Linux或Mac中,什么是进行文本处理的最佳工具?,linux,text-processing,Linux,Text Processing,我通常需要为我的研究做大量的文本处理,例如从所有行中删除最后一个标记,从每行中提取前两个标记,将每行拆分为标记,等等 执行此操作的最佳方式是什么?我应该为此学习Perl吗?或者我应该学习一些shell命令吗?主要关注的是速度。如果我需要为这样的东西编写长代码,那就达不到目的了 编辑: 我根据@mimisbrunr的建议开始学习sed,并且已经可以做我需要做的事情了。但人们似乎更喜欢awk。所以,我会试试看。感谢您的回复。对于执行简单的steam编辑,sed是一个伟大的实用程序,在大多数*nix框

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

执行此操作的最佳方式是什么?我应该为此学习Perl吗?或者我应该学习一些shell命令吗?主要关注的是速度。如果我需要为这样的东西编写长代码,那就达不到目的了

编辑:


我根据@mimisbrunr的建议开始学习sed,并且已经可以做我需要做的事情了。但人们似乎更喜欢awk。所以,我会试试看。感谢您的回复。

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

如果您不想学习一门新语言,可以想到Perl和awk,尽管Python也可以

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

#!/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

*nix工具,如awk/grep/tail/head/sed等是很好的文件处理工具。如果要搜索文件中的模式并对其进行处理,可以使用awk。对于大文件,您可以使用grep+awk的组合。Grep的模式搜索速度快,awk的文本处理能力强。关于sed,通常sed做的事情,awk已经可以做了,所以我发现使用sed进行文件处理是多余的

在处理文件的速度方面,AWK通常是PAR或有时优于Perl或其他语言。p>


另外,两个非常好的快速获取文件前后部分的工具是
tail
head
。因此,要获取最后一行,可以使用
tail

当然,最佳工具取决于要执行的任务。除了其他人引用的常用*nix工具(如sed/awk等)和编程语言(Perl、Python)之外,目前对于原始数据格式不遵循严格的解析规则但可能略有不同的文本处理,我发现自己非常熟悉Vim编辑器中调用的Vim宏和Vimscript函数

类似这样的内容(对于未初始化的Vim):在文件script.Vim上编写处理函数,例如TxtProcessingToBeDone1(),使用:source script.Vim进行源代码生成,然后打开要编辑的文件并:

:调用TxtProcessingToBeDone1()

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

使用Vimscript功能,您可以重复在常规编辑会话中执行的所有任务(搜索模式、reg ex、替换、移动到、删除、拖动等),使其自动化,并应用一些编程控制流(如果/然后)


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

您已经知道哪些编程语言?C、Java和一点Python。。阅读“掌握正则表达式”,学习Perl、Python或Ruby或任何在你的实验室/领域/同事/最近的人中最流行的语言,你可以定期提问。这不是真正的编程问题。投票决定转向超级用户。这是一个编程问题:他在问用什么编程语言来处理文本文件。“每当遇到问题时,有些人会说‘让我们使用AWK’。现在,他们有两个问题。”--D.蒂尔布鲁克;)@ronys,awk不仅仅用于文本处理。你也可以把它作为一种编程语言使用。@ghostdog:这句话流传了20年(自1988年以来)。它告诉我们一些事情。另请注意
;)在结尾:)你不觉得它无关紧要而且过时了吗?从那时起,awk已经走过了漫长的道路。你能为awk推荐一些好的资源吗?
perl-lane'$,=”;pop@F;print@F“
perl-lane”$,=”;print@F[0,1]“
@Hynek-Pichi-Vychodil:尝试一下小实验:向不知道Perl和Python版本的人展示Perl和Python版本,并询问他们这些脚本的作用。我同意,除了J(对于数学方面的东西)之外,Perl one liners在简洁性方面是无可比拟的。我假设,通过“tokens”,OP表示一行中的项目,而不是文件的行,因此
tail
将不适用于这种情况<代码>切割
,另一方面。。。