【问题标题】:awk to print required number of fieldsawk 打印所需的字段数
【发布时间】:2016-04-05 12:10:08
【问题描述】:
07:46:24,059 DEBUG [com.ibm.cmps.portal.web.account.tree.RelationshipRetriever] (http-nykdsr9622/10.54.65.111:4150-3) Fund count: 14
07:46:28,378 DEBUG [com.ibm.cmps.extgrid.grid.StaticHtmlControl] (http-nykcsr5422/10.54.65.111:4150-3) rowCount:75 - displayThreshold:75
07:46:28,384 INFO [com.ibm.cmps.extgrid.xml.TreeGridV6XmlGenerator] (http-nykdsr9622/10.54.65.111:4150-3) Finished layout rendering in 9 ms

日志文件的格式如上。我只想打印 JavaClass Name 和 Message Log。例如,从上面的文本中,我需要提取下面的数据。

[com.ibm.cmps.portal.web.account.tree.RelationshipRetriever] Fund count: 14 
[com.ibm.cmps.extgrid.grid.StaticHtmlControl] rowCount:75 - displayThreshold:75
[com.ibm.cmps.extgrid.xml.TreeGridV6XmlGenerator] Finished layout rendering in 9 ms

我希望打印我正在使用 awk 命令来获取它。以下是用 awk 分隔的单词..

$1=07:46:24,059
$2=DEBUG
$3=[com.ibm.cmps.portal.web.account.tree.RelationshipRetriever]
$4=(http-nykdsr9622/10.54.65.111:4150-3)    
$5,$6,.. remaining Log message

由于 $4 之后的单词数不固定,我希望打印 $3 和 $5 之后的所有单词

我尝试使用以下命令-

awk '{print $3, $5;}' jboss.log
awk '{print $3, $5,$6;}' jboss.log

我希望接受 $4 之后的所有单词。

awk 允许这样做吗?

我也希望使用任何其他命令。

【问题讨论】:

标签: linux bash awk


【解决方案1】:

您可以为此使用cut

cut -d' ' -f3,5- jboss.log

它打印字段 3 和从 5 开始到结尾的字段,而字段由空格分隔。


使用 awk 会更加冗长,最好在多行版本中进行解释:

script.awk

# on every line
{
    # print field 3
    printf "%s", $3

    # iterate from 5 to number of fields ...
    for(i=5;i<=NF;i++) 
        # ... and print them 
        printf " %s", $i

    # print newline at the end
    printf "\n"
}

这样称呼它:

awk -f script.awk jboss.log

【讨论】:

    【解决方案2】:

    将打印除第一列之外的所有列:

    awk '{$1=""; print $0}' somefile
    

    将打印除前两列之外的所有列:

    awk '{$1=$2=""; print $0}' somefile
    

    答案来自here

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2011-01-06
      相关资源
      最近更新 更多