簡體   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