awk打印所需的字段数

时间:2015-12-31 14:30:50

标签: linux bash awk

yum list installed | grep rpmforge | awk '{ print $1 }'

日志文件的格式如上。我想只打印JavaClass名称和消息日志。例如,从上面的文字,我需要提取下面的数据。

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

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

[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

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

我尝试使用以下命令 -

$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美元之后接受所有的话。

awk是否允许这样做?

我也很感激使用任何其他命令。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

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

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

答案来自here