具有复杂记录分隔符的gawk仅打印第一个匹配记录

用户名

以下gawk命令仅打印第一个匹配项,而我需要输入文件中的所有匹配项。

 $ gawk 'BEGIN{RS="{Mon,Tue} Mar {21,22} [0-9]{2}:[0-9]{2}:[0-9]{2} 2016";FS ="\n";OFS="\n"} {print savedRT, $1, $2, $3, $4} {savedRT = RT}' iostat.20160321

Mon Mar 21 20:05:00 2016
 cpu
us sy wt id
4  2  0 94

这是输入数据格式的模板:

Mon Mar 21 20:05:00 2016
 cpu
us sy wt id
4  2  0 94
...
...
...
Mon Mar 21 20:10:00 2016
 cpu
us sy wt id
3  2  0 94
...
...
...

gawk是否有全局标志?我想念什么?

本杰明W.

您可以按以下方式解决此问题(需要GNU awk 1):

$ awk 'BEGIN {
    RS = "(Mon|Tue) Mar (21|22) [0-9]{2}:[0-9]{2}:[0-9]{2} 2016"
    FS = OFS = "\n"
}
NR > 1 { print savedRT $1, $2, $3, $4 }
{ savedRT = RT }' infile
Mon Mar 21 20:05:00 2016
 cpu
us sy wt id
4  2  0 94
Mon Mar 21 20:10:00 2016
 cpu
us sy wt id
3  2  0 94

需要进行以下更改:

  • 变化{Mon,Tue}{21,22},在记录分离到(Mon|Tue)(21|22)适当交替的正则表达式
  • 如果NR大于1,则仅开始打印;否则,仅开始打印该文件以记录分隔符开头,因此第一条记录为空,我们不想打印一堆空行。
  • savedRT包含一个换行符,因此如果我们像打印一个换行符一样,那么print savedRT, $1换行符会太多。更改为print savedRT $1会删除该多余的换行符。

1确切地说,是GNU awk 4.0.0或更高版本,因为[0-9]{2}较早的gawks无法识别间隔表达式,请参见发行说明一种解决方法是仅使用[0-9][0-9]替代方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python仅通过第一个分隔符将文件(或字符串)读入字典

来自分类Dev

如何以分隔符仅包含第一个单词的方式剪切文件名

来自分类Dev

如何仅使用字符串中的第一个逗号作为分隔符?

来自分类Dev

只识别第一个匹配记录

来自分类Dev

仅打印第一个匹配项

来自分类Dev

SQL删除具有相同值的所有连续记录,仅保留第一个和最后一个

来自分类Dev

查找第一个匹配记录的最有效方法是什么?

来自分类Dev

在两列中显示具有重复值的记录的第一个实例

来自分类Dev

查找并打印具有匹配模式的第一个单词

来自分类Dev

计算具有给定日期中第一个出现的相关记录的记录

来自分类Dev

如何在SQL Server中的分隔符之前获取第一个值

来自分类Dev

从每行第一个位置StringJoiner删除分隔符

来自分类Dev

熊猫强迫列基于第一个`k`分隔符字符串

来自分类Dev

小写的分隔符Python之后的第一个字母

来自分类Dev

如何使表格视图的第一个分隔符透明(不透明)?

来自分类Dev

为什么 JS Join 在第一个值之前添加分隔符?

来自分类Dev

Codeigniter Active Record仅选择第一个记录,而不是最新记录

来自分类Dev

如何读取具有列分隔符和记录分隔符的 csv 文件

来自分类Dev

如何使用awk通过第一个非空白字符将文本文件拆分为记录,并仅打印包含字符串的记录

来自分类Dev

SQL查询仅具有一个条件的记录

来自分类Dev

为什么在对第一个数组的第0个索引进行填充没有分隔符的split()时会出现“”?

来自分类Dev

我想打印以特殊词开头的行,而在其余记录中仅打印第一个字段

来自分类Dev

我如何最好地使用componentsSeparatedByCharacterSet,但将分隔符/分隔符保留在第一个单词上?

来自分类Dev

获取第一个tbl中的所有记录,并在第二个tbl中匹配(指示已存在的记录)

来自分类Dev

在R(data.table)中查找具有记录的连续两周的第一个日期

来自分类Dev

在R(data.table)中查找具有记录的连续两周的第一个日期

来自分类Dev

在MySQL中更新重复记录(仅第一个mtch)

来自分类Dev

如何在R中将数据仅连接到具有{data.table}的第一个匹配行

来自分类Dev

为什么只匹配记录中的第一个单词?

Related 相关文章

  1. 1

    python仅通过第一个分隔符将文件(或字符串)读入字典

  2. 2

    如何以分隔符仅包含第一个单词的方式剪切文件名

  3. 3

    如何仅使用字符串中的第一个逗号作为分隔符?

  4. 4

    只识别第一个匹配记录

  5. 5

    仅打印第一个匹配项

  6. 6

    SQL删除具有相同值的所有连续记录,仅保留第一个和最后一个

  7. 7

    查找第一个匹配记录的最有效方法是什么?

  8. 8

    在两列中显示具有重复值的记录的第一个实例

  9. 9

    查找并打印具有匹配模式的第一个单词

  10. 10

    计算具有给定日期中第一个出现的相关记录的记录

  11. 11

    如何在SQL Server中的分隔符之前获取第一个值

  12. 12

    从每行第一个位置StringJoiner删除分隔符

  13. 13

    熊猫强迫列基于第一个`k`分隔符字符串

  14. 14

    小写的分隔符Python之后的第一个字母

  15. 15

    如何使表格视图的第一个分隔符透明(不透明)?

  16. 16

    为什么 JS Join 在第一个值之前添加分隔符?

  17. 17

    Codeigniter Active Record仅选择第一个记录,而不是最新记录

  18. 18

    如何读取具有列分隔符和记录分隔符的 csv 文件

  19. 19

    如何使用awk通过第一个非空白字符将文本文件拆分为记录,并仅打印包含字符串的记录

  20. 20

    SQL查询仅具有一个条件的记录

  21. 21

    为什么在对第一个数组的第0个索引进行填充没有分隔符的split()时会出现“”?

  22. 22

    我想打印以特殊词开头的行,而在其余记录中仅打印第一个字段

  23. 23

    我如何最好地使用componentsSeparatedByCharacterSet,但将分隔符/分隔符保留在第一个单词上?

  24. 24

    获取第一个tbl中的所有记录,并在第二个tbl中匹配(指示已存在的记录)

  25. 25

    在R(data.table)中查找具有记录的连续两周的第一个日期

  26. 26

    在R(data.table)中查找具有记录的连续两周的第一个日期

  27. 27

    在MySQL中更新重复记录(仅第一个mtch)

  28. 28

    如何在R中将数据仅连接到具有{data.table}的第一个匹配行

  29. 29

    为什么只匹配记录中的第一个单词?

热门标签

归档