簡體   English   中英

如何使用awk打印其余的列?

[英]How to print the remaining columns using awk?

現在,我有一個命令以帶分隔符的格式打印我的日志文件| 每列。

cat ambari-alerts.log | awk -F '[ ]' '{print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|"}' |
grep "$(date +"%Y-%m-%d")"

日志文件數據的示例是這樣的:

2016-02-11 09:40:33,875 [OK] [MAPREDUCE2] [mapreduce_history_server_rpc_latency] (History Server RPC Latency) Average Queue Time:[0.0], Average Processing Time:[0.0]

我的命令的結果是這樣的:

2016-02-11|09:40:33,875|[OK]|[MAPREDUCE2]|[mapreduce_history_server_rpc_latency]

我想打印其余的列。 我怎樣才能做到這一點? 我嘗試使用此語法添加$0 ,但不幸的是,它只是再次打印了整行。

awk -F '[ ]' '{print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" $0}'

希望您能對我有所幫助,新手可以在這里使用awk。

這似乎就是您所需要的:

$ awk '{for (i=1;i<=5;i++) sub(/ /,"|")} 1' file
2016-02-11|09:40:33,875|[OK]|[MAPREDUCE2]|[mapreduce_history_server_rpc_latency]|(History Server RPC Latency) Average Queue Time:[0.0], Average Processing Time:[0.0]

這對awk有點麻煩

awk -F '[ ]' '{
    printf "%s|%s|%s|%s|%s|", $1, $2, $3, $4, $5
    for (i=6; i<=NF; i++) printf "%s ", $i
    print ""
}'

或者,替換前5個空格:

awk -F '[ ]' '{
    sub(/ /, "|");sub(/ /, "|");sub(/ /, "|");sub(/ /, "|");sub(/ /, "|")
    print
}'

這實際上更容易bash

while IFS=" " read -r a b c d e rest; do
    echo "$a|$b|$c|$d|$e|$rest"
done < file.log

折疊您的grep:

awk -F '[ ]' -v date="$(date +%Y-%m-%d)" '{
    $0 ~ date {
        printf "%s|%s|%s|%s|%s|", $1, $2, $3, $4, $5
        for (i=6; i<=NF; i++) printf "%s ", $i
        print ""
    }
}'

以下是一些awk,它提供了比前5列強行使用更通用的方法:

awk '{
      for (i = 1; i < 6; i++)
        printf "%s|", $i
      for (i = 6; i < NF; i++)
        printf " %s ", $i
      }' ambari-alerts.log | grep "$(date +"%Y-%m-%d")"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM