如何在unix命令行中分割文件?

jau*_*vid 22 unix awk command-line tokenize

我正在为一个天真的布尔信息检索系统做更快的测试,我想使用awk,grep,egrep,sed或类似的东西和管道将文本文件拆分成单词并将它们保存到其他文件中,每行一个单词.示例我的文件cotains:

Hola mundo, hablo español y no sé si escribí bien la
pregunta, ojalá me puedan entender y ayudar
Adiós.
Run Code Online (Sandbox Code Playgroud)

输出文件应包含:

Hola
mundo
hablo
español
...
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gur*_*uru 47

使用tr:

tr -s '[[:punct:][:space:]]' '\n' < file
Run Code Online (Sandbox Code Playgroud)

  • +1我认为这可能与海报想要的最接近,但他确实说'O'Hara`和`X-ray`以及包含`[:punct:]`字符的其他一些组合应该被视为一个单词这个解决方案不会做什么.他可能也希望输出管道"排序",所以他只是在输出中得到一个单词,但现在我猜. (2认同)
  • 也许扩展`[:punct:]`并删除`-`和`'`,使:`tr -s '[*!"#\$%&amp;\(\)\+,\\\.\/:; &lt;=&gt;\?@\[\\\\]^_\`\{|\}~][:space:]]' '\n' &lt; file`; 可选地,因为 Ed Morton 还建议排序并可能添加频率: `tr -s '[*!"#\$%&amp;\(\)\+,\\\.\/:;&lt;=&gt;\?@\[\\\\]^_\`\{| \}~][:space:]]' '\n' &lt; 文件 | 排序 | uniq -c | 排序-nr`。有点纠结,但也许不错。还要考虑字符大小写。正确的标记化可能很棘手:) (2认同)

gee*_*ekQ 8

最简单的工具是fmt:

fmt -1 <your-file
Run Code Online (Sandbox Code Playgroud)

fmt旨在打破行以适应指定的宽度,如果你提供-1它,则在单词后面立即中断.有关man fmt文档,请参阅 灵感来自http://everythingsysadmin.com/2012/09/unorthodoxunix.html