从文件Unix中提取数据

时间:2016-04-07 11:46:59

标签: unix awk

我的文件中有空格分隔列,我希望提取特定数据。下面是文件的格式:

12:00:01 AM     CPU      %usr     %nice      %sys   %iowait    %steal      %irq     %soft    %guest     %idle
12:01:01 AM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
12:02:01 AM     all     93.42      0.00      0.53      0.00      0.00      0.00      0.10      0.00      5.95
12:03:01 AM       1     88.62      0.00      1.71      0.00      0.00      0.00      0.71      0.00      8.96
12:01:01 AM       2     92.56      0.00      0.70      0.00      0.00      0.00      1.17      0.00      5.58
12:01:01 AM       3     86.90      0.00      1.57      0.00      0.00      0.00      0.55      0.00     10.99
01:01:01 AM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
01:02:01 AM     all     93.42      0.00      0.53      0.00      0.00      0.00      0.10      0.00      5.95
01:03:01 AM     all     88.62      0.00      1.71      0.00      0.00      0.00      0.71      0.00      8.96
01:01:01 AM       2     92.56      0.00      0.70      0.00      0.00      0.00      1.17      0.00      5.58
01:01:01 AM       3     86.90      0.00      1.57      0.00      0.00      0.00      0.55      0.00     10.99
12:01:01 PM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
12:02:01 PM       0     93.42      0.00      0.53      0.00      0.00      0.00      0.10      0.00      5.95
12:03:01 PM       1     88.62      0.00      1.71      0.00      0.00      0.00      0.71      0.00      8.96
12:01:01 PM       2     92.56      0.00      0.70      0.00      0.00      0.00      1.17      0.00      5.58
12:01:01 PM       3     86.90      0.00      1.57      0.00      0.00      0.00      0.55      0.00     10.99

现在,从这个文件中我希望那些时间如12:01:01 AM/PM的行i每小时一次,并且在all中有column个 所以在提取后我想要下面的数据,但我无法得到它。

12:01:01 AM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
01:01:01 AM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
12:01:01 PM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33

请建议我如何在UNIX中获取数据

2 个答案:

答案 0 :(得分:1)

如果您将-E选项添加到grep,则可以查找"扩展正则表达式" 。一个这样的表达是

"CPU|01:01"

这将允许您查找包含单词" CPU"的所有行。 (例如您的列标题行)以及任何带有" 01:01"在他们中。它被称为"交替" 并使用管道符号(|)来分隔备用子部分。

所以,答案是"

grep -E "CPU|01:01 .*all" yourFile > newFile

尝试跑步:

man grep

获取手册(帮助)页面。

答案 1 :(得分:0)

keyboardDismissMode救援!

如果您需要字段特定匹配,awk是正确的工具。

awk

您也可以使用此

提取标题
$ awk '$3=="all" && $1~/01:01$/' file

12:01:01 AM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
01:01:01 AM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33
12:01:01 PM     all     78.13      0.00      0.98      0.00      0.00      0.00      0.56      0.00     20.33