awk - 如何使用 awk 分割文件来进行多行记录?

标签 awk

在 OSX 上,我已将 Powerpoint 幻灯片转换为 ASCII 文本,现在想使用 awk 对其进行处理。

  • 我想将文件拆分为与幻灯片中的幻灯片相对应的多行记录。
  • 处理任何以大写拉丁字母开头的行提供了一个很好的近似值,但我无法弄清楚在 awk 中执行此操作。
  • 我尝试重置记录分隔符,RS = "\n^[A-Z]"RS = "\n^[[:alnum:]][[:upper :]]",以及各种排列,但没有区别。也就是说,awk 始终将每个个体视为一条记录,而不是按照我的意愿将它们分组。

清理后的文本如下所示:

Welcome
++  Class will focus on:
–   Basics of SQL syntax
–   SQL concepts analogous to Excel concepts
Who Am I
++  Self-taught on LAMP(ython) stack
++  Plus some DNS, bash scripting, XML / XSLT
++  Prior professional experience:
–   Office of Management and Budget
–   Investment banking (JP Morgan, UBS, boutique)
–   MBA, University of Chicago


Roadmap
+   Preliminaries
+   What is SQL
+   Excel vs SQL
+   Moving data from Excel to SQL and back
+   Query syntax basics
-   Running queries
-   Filtering, grouping
-   Functions
-   Combining tables
+   Using queries for analysis

有些“幻灯片”有空行,有些则没有。

一旦克服了这些障碍,我计划将每条记录包装在一个标签中,以便在 Deck.js 中使用。但正确地记录定义简直要了我的命。

我该如何做这些事情?

编辑:最初问的问题还涉及将 Unicode 项目符号字符转换为 ASCII,但我已经弄清楚了。评论中的一些评论集中在这些内容上。

最佳答案

awk 中,您可以尝试使用以下方式收集记录:

/^[[:upper:]]/ {
    if (r>0) print rec 
    r=1; rec=$0 RS;    next
}
{  
    rec=rec $0 RS 
}

END {
    print rec
}

要删除项目符号,您可以使用

gsub (/•/,"++",rec)

关于awk - 如何使用 awk 分割文件来进行多行记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478086/

相关文章:

awk/grep 特定列的某些部分

awk - 如何替换括号内的一个字符并保持其他所有字符不变

Bash - 在 ": "上分割命令结果并使用第一部分调用程序

Linux 庆典 : How to group a ip list into common subnets?

linux - 将多个文件合并为一个文件,包括 shell 中不匹配的行

shell - 搜索多个字符串

bash - 使用 bash 命令在列中创建编号集

bash - AWK 将 NULL 列值替换为前一行的列值(续)

regex - 提取模式两端由标识符括起来的多行

regex - awk 的 ^(插入符号)排除是如何工作的?