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/

相关文章:

perl - 在 Perl 中删除超过 90 天的文件

Java:从终端读取输入提示

linux - 零拷贝 UDP 打包是否可能在 Linux 上接收?

linux - bash for循环中的迭代顺序是否得到保证?

bash - 使用 sed 仅将所有参数中的数字获取到 bash 脚本

ruby - 为目录中的所有文件(递归地)创建符号链接(symbolic link)到其他目录

xml - 如何使用 perl 解析 KML 文件?

java - 如何在不同操作系统之间左对齐 JFrame 标题文本

linux删除目录中除符号链接(symbolic link)之外的文件?

perl - 如何在 perl 中操作输出