如何将awk拆分文件用于多行记录?

时间:2013-10-20 13:45:52

标签: 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,但我已经想到了这一点。评论中的一些评论集中在那些东西上。

2 个答案:

答案 0 :(得分:1)

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

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

END {
    print rec
}

要删除可以使用的项目符号

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

答案 1 :(得分:1)

您可以尝试使用OSX中内置的“textutil”实用程序来转换脚本中的文件,以节省您手动完成所有操作。尝试在终端窗口中键入以下内容,然后按移动到下一页:

man textutil

一旦您获得了一些转换后的文本,请尝试发布,以便人们可以看到输入的样子,然后也许有人可以帮助您按照自己的意愿进行分割。