我已经完成了 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/