首页 > 解决方案 > 用我的 awk 脚本删除无用/空行

问题描述

对于我在 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 脚本搜索了如何删除(或不显示)这些无用的行,但我不知道如何......你有什么想法吗?

标签: linuxbashcsvawk

解决方案


你可以简单地这样做:

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. 代码注入将更加健壮。


推荐阅读