[英]awk to print specific columns based on conditions
所以我從grep獲得了這個文本:
$ bppllist -allpolicies -l | egrep 'INFO|CLASS '
CLASS DEV_DC1_MSSQL_Daily *NULL* 0 760000 0 *NULL*
INFO 15 0 0 3590 *NULL* 0 0 2147483647 0 0 0 0 0 0 0 0 0 0 1359375508 D2135AE2694411E293B100C0DD0FD650 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 93 0 0 0 0 0 0 1
CLASS DEV_DC1_MSSQL_Daily_TL *NULL* 0 760000 0 *NULL*
INFO 15 0 0 3590 *NULL* 0 0 2147483647 0 0 0 0 0 0 0 0 0 0 1359375508 538E4964610F11E5B3CB00C0DD0FD650 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 50 0 0 0 0 0 0 1
CLASS DEV_DC1_MSSQL_Monthly *NULL* 0 760000 0 *NULL*
INFO 15 0 0 3590 *NULL* 0 0 2147483647 0 0 0 0 0 0 0 0 0 0 1359375508 53B1F616610F11E5A02E00C0DD0FD650 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 58 0 0 0 0 0 0 1
我想在一行中喚醒它,如果可能的話,獲取第二列CLASS行和第12列INFO行。
我在SunOS 5.10 sun4v sparc SUNW 。
我試着這樣做:
bppllist -allpolicies -l | egrep 'INFO|CLASS ' | awk '($1 == "CLASS ") && ($2 == "INFO") { print $2 $12}'
但我認為這只是一種調節而不是雙重過濾。
另外,有沒有辦法讓他們采用這種格式?
DEV_DC1_MSSQL_Daily 0
DEV_DC1_MSSQL_Daily_TL 0
DEV_DC1_MSSQL_Monthly 0
只是這樣說:
$ awk '$1=="CLASS" {print $2} $1=="INFO" {print $12}' file
DEV_DC1_MSSQL_Daily
0
DEV_DC1_MSSQL_Daily_TL
0
DEV_DC1_MSSQL_Monthly
0
請注意,此條件下您之前的egrep "INFO|CLASS "
可能也是不必要的。
要生成一個緊湊的輸出,只需在找到“CLASS”時捕獲該值,並在“INFO”中打印它:
$ awk '$1=="CLASS" {c=$2} $1=="INFO" {print c, $12}' file
DEV_DC1_MSSQL_Daily 0
DEV_DC1_MSSQL_Daily_TL 0
DEV_DC1_MSSQL_Monthly 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.