Linux/bash 解析文本输出,选择字段,仅忽略一个字段中的空值

标签 linux bash perl awk sed

我已经完成了 20 次必要的搜索,但我找不到包含我正在尝试执行的“忽略空值”部分的示例。在使用 bash 并具有 grep/awk/sed/perl 和其他常见嫌疑人的 Linux-ish 系统上工作。作业的输出格式为:

Some Field I Dont Care About        = Nothing Interesting
Another Field That Doesnt Matter    = 216
Name                                = The_Job_name
More Useless Stuff                  = Blah blah
Estimated Completion                = Aug 13, 2015 13:30 EDT
Even Yet Still More Nonsense        = Exciting value
...

当前未激活的作业的预计完成时间将为空值。字段名称很长,多词名称包含空格,如图所示。分隔符始终为“=”,并且始终出现在同一列中,两边用空格填充。可能列出了几十个职位,每个职位大约有 36 个字段。在任何给定时间,只有一两个活跃的,而那些是我关心的。

我正在尝试为当前事件的每条记录在一行中获取“名称”字段的值和“估计完成”字段的值,因此忽略空值,如下所示:

Job_04 Aug 13, 2015 13:30 EDT
Job_21 Aug 09, 2015 10:10 EDT
...

我从 <command> | grep '^Name\|^Estimated' 开始这让我得到了我关心的台词。

我已经转到了awk -F"=" '/^Name|^Estimated/ {print $2}'它自己获取值。这是开始出错的地方 - 我尝试使用 awk -F"=" '/^Name|^Estimated/ {print $2}'| sed 'N;s/\n/ /' 加入每一行但是从中输出的结果非常不稳定。除此之外,我不确定我是否应该寻找空行并消除它们(以及前面的行)以消除此时的空值,或者是否最好将值读入变量并打印它们。

我不是 Perl 专家,但如果那是更好的方法,我很乐意换档并朝着那个方向前进。任何想法或建议表示赞赏,谢谢!

Some Field I Dont Care About        = Nothing Interesting
Another Field That Doesnt Matter    = 216
Name                                = Job_4119
More Useless Stuff                  = Blah blah
Estimated Completion                =
Even Yet Still More Nonsense        = Exciting value
...

最佳答案

我不能发表评论,声望不够... 但我认为这样的事情会在你的打印命令中起作用

{printf "%s,",$2;next}{print;}

或者使用粘贴命令?

paste -s -d",\n" file

关于Linux/bash 解析文本输出,选择字段,仅忽略一个字段中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840004/

相关文章:

bash - 如何在 docker 中使用 bash 作为 PID1 重现僵尸进程?

linux - 计数器变量的值在哪里? linux-bash

linux - 如何为 Git 命令设置自动完成功能?

python - 与 Perl 和 Python 相比,正则表达式模式在 TCL 中的行为有所不同

linux - 是什么导致我的 rsyslog 时区偏移和/或时间不正确?

linux - 使用 screen 和设置压缩级别在 bash 中压缩文件

python - 在 Linux 上使用多处理时不会出现 TKinter 窗口

Linux如何使空间与以前相似

perl - 如何使用 Data::Dumper 显示可读的 UTF-8 字符串?

regex - 为什么在这个 Perl 正则表达式中 `\s+` 比 `\s\s*` 快得多?