簡體   English   中英

用我的awk腳本刪除無用/空行

[英]Delete useless/empty line with my awk script

對於我的bash / html中的CGI,我有以下腳本(只是awk腳本,其余代碼只是一個簡單的hmtl代碼):

for fn in /var/www/cgi-bin/LPAR_MAP/*; do
    awk -F',|;' 'NR==1 { split(FILENAME ,a,"[-.]");
       print "DATE ========================== : " a[4] }
       /'$test'/ { 
           print ""
           print "LPARS :" $2
           print "RAM : " $5
           print "CPU 1 : " $6
           print "CPU 2 : " $7
           print "" 
           print ""}' $fn;
done

我的腳本分析了許多CSV文件並像這樣顯示我需要的信息:

DATE ========================== : 20180122

LPARS :miaibye01
RAM : 60
CPU 1 : 1.0
CPU 2 : 2



LPARS :miaibg04
RAM : 99
CPU 1 : 1.5
CPU 2 : 3



LPARS :miaibk07
RAM : 52
CPU 1 : 2.5
CPU 2 : 5

DATE ========================== : 20180124

LPARS :miaibye01
RAM : 60
CPU 1 : 1.0
CPU 2 : 2



LPARS :miaibg04
RAM : 99
CPU 1 : 1.5
CPU 2 : 3



LPARS :miaibk07
RAM : 52
CPU 1 : 2.5
CPU 2 : 5



LPARS :miaibv176
RAM : 0.25
CPU 1 : 0.1
CPU 2 : 1

...

但是有時候,當我的腳本找不到所需的信息時,它會顯示所需的信息,並在腳本中查找該信息的文件日期。 輸出為:

DATE ========================== : 20180923
DATE ========================== : 20180924
DATE ========================== : 20180925
DATE ========================== : 20180926
DATE ========================== : 20180927
DATE ========================== : 20180928
DATE ========================== : 20180929
DATE ========================== : 20180930
DATE ========================== : 20181001

我搜索了如何用awk腳本刪除(或不顯示)這些無用的行,但是我不知道如何...您有這樣做的想法嗎?

您可以簡單地做到這一點:

for fn in /var/www/cgi-bin/LPAR_MAP/*; do
    awk -F',|;' -v test="$test" '
       NR==1 { 
         split(FILENAME ,a,"[-.]");
       }
       $0 ~ test {
           if(!header++){
               print "DATE ========================== : " a[4] 
           }
           print ""
           print "LPARS :" $2
           print "RAM : " $5
           print "CPU 1 : " $6
           print "CPU 2 : " $7
           print "" 
           print ""
       }' $fn;
done

僅在$ 0〜$ test時才第一次打印標題。 請注意,我對您的代碼做了一些更改,以創建一個等於$test的awk變量。 這將對代碼注入更加健壯。

您不需要為此的shell循環,只需:

awk -F'[,;]' -v test="$test" '
    FNR==1 { doneHdr = 0 }
    $0 ~ test {
        if ( !doneHdr++ ) {
            split(FILENAME,a,/[-.]/)
            print "DATE ========================== : " a[4]
        }
        print ""
        print "LPARS :" $2
        print "RAM : " $5
        print "CPU 1 : " $6
        print "CPU 2 : " $7
        print "" 
        print ""
    }
' /var/www/cgi-bin/LPAR_MAP/*

暫無
暫無

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

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