繁体   English   中英

awk打印所需的字段数

[英]awk to print required number of fields

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名称和消息日志。 例如,从上面的文本中,我需要从下面提取数据。

[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允许这样做吗?

我将不胜感激任何其他命令的用法。

您可以为此使用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

将打印除第一列以外的所有内容:

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

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

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

答案是从这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM