当前位置: 首页 > 知识库问答 >
问题:

使用awk/sed/bash检索所有必需字段后打印

秦琦
2023-03-14
Checkpoint number: ckpt.123
value1: 10
value2: 10
Checkpoint number: ckpt.234
value1: 20
value2: 25
ckpt.123,10,10
ckpt.234,20,25
awk < awk_test.txt '/ckpt/{a=$NF} /value1/{b=$NF} /value2/{c=$NF} END {printf "%s,%s,%s\n",a,b,c}'

共有1个答案

翟鹏
2023-03-14

您只能打印end块中的数据。当然,您需要end块,但是当您到达ckpt行并且已经积累了一些数据时,您还需要打印。这导致:

awk '/ckpt/   { if (a != "") printf "%s,%s,%s\n", a, b, c; a = $NF }
     /value1/ { b = $NF }
     /value2/ { c = $NF }
     END      { printf "%s,%s,%s\n", a, b, c }'

在示例数据上使用时,将生成:

ckpt.123,10,10
ckpt.234,20,25

或者您甚至可以使用一个函数来封装打印:

awk 'function print_it() { printf "%s,%s,%s\n", a, b, c; }
     /ckpt/   { if (a != "") print_it(); a = $NF}
     /value1/ { b = $NF }
     /value2/ { c = $NF }
     END      { print_it() }'
 类似资料:
  • 问题内容: 这行一直有效,直到我在第二个字段中留有空格。 有没有办法让awk打印$ 2或以上的所有内容?($ 3,$ 4 ..直到我们没有更多的列了?) 我想我应该补充一点,就是我在Windows环境中使用Cygwin进行此操作。 问题答案: 将打印除第一列以外的所有内容: 将打印除第一列以外的所有列:

  • 我有一个大约有500行信息的文本文件。 有没有什么方法可以使用awk和sed实现这一点呢?

  • 主要内容:PHP - 必需字段,PHP - 显示错误信息本章节我们将介绍如何设置表单必需字段及错误信息。 PHP - 必需字段 在上一章节我们已经介绍了表的验证规则,我们可以看到"名字", "E-mail", 和 "性别" 字段是必需的,各字段不能为空。 字段 验证规则 名字 必需。 + 只能包含字母和空格 E-mail 必需。 + 必需包含一个有效的电子邮件地址(包含"@"和".") 网址 可选。 如果存在,它必需包含一个有效的URL 备注 可选。多

  • 问题内容: 只想知道它们之间的主要区别是什么?以及每种语言的功能(最好使用它)。 编辑: 不是“ vs”。就像话题,只是信息。 问题答案: 在出现的顺序,语言是,,,。 该程序是一个流编辑器,旨在将脚本中的操作应用于输入文件的每一行(或更一般而言,应用于指定的行范围)。它的语言基于Unix编辑器,尽管它具有条件等,但是很难处理复杂的任务。您可以用它创造一些小奇迹- 但要花很多钱。但是,当尝试在其权

  • 我正在尝试向一个大约有500行的文件中添加几列,但现在让我们假设我使用的是一个有500行的文件。 我有两个命令。一个sed命令和一个awk命令