【发布时间】:2013-12-24 00:04:43
【问题描述】:
我有一个输出到 awk,并在某些行的末尾找到了一个好的 RS 字符串。 但是当我将尾随字符串定义为 RS 时,awk 只会删除整行内容。我希望保留 RS 字符串之前的数据,并且只从行中删除 RS。
awk 的输入示例:
data data data RS_STRING
data SEARCHED_STRING data data
data data
data data data RS_STRING
data data data
data data
data data data RS_STRING
data SEARCHED_STRING data data
data data
来自 awk 的期望输出:
data data data
data SEARCHED_STRING data data
data data
data data data
data SEARCHED_STRING data data
data data
我目前的 awk 语法是:
awk '/SEARCHED_STRING/' RS = "RS_STRING"
...我得到:
data SEARCHED_STRING data data
data data
data SEARCHED_STRING data data
data data
正如您通过将 RS_STRING 定义为 RS 所看到的,awk 会删除 RS 之前的所有数据,包含在该行中。
过去三天我一直在寻找解决方案,但还没有找到。
提前谢谢你。
【问题讨论】:
-
欢迎来到 Stack Overflow。请尽快阅读About 页面。 RS 是记录(行)分隔符;您是否认为您找到了一个好的字段分隔符?如果你的意思是记录分隔符,那么样本数据只有 3 条记录,第三条没有终止(第一个 RS STRING 之前的材料,两个标记之间的材料,以及第二个标记之后的材料)。您使用的 RS 字符串到底是什么?你到底是如何设置 RS 的?
-
如前所述,我遇到的问题是设置一个不在一行开头的 RS。当我在一行的开头设置一个 RS 时,它会从该行中剥离,并且该行的 RS 之后的数据保持不变。但是,如果 RS 位于该行中的任何其他位置,则直到定义的 RS 的所有内容都将被删除。我想保留该数据。这个例子只是为了说明我想要完成的事情。
-
尝试 sed 并将 RS STRING 替换为 null。示例:sed 's/RS STRING//'
-
但 RS 是“行尾”的标志...
-
我刚刚编辑了我的原始帖子以更好地说明我的问题。
标签: awk