Linux 用我的awk脚本删除无用/空行
对于bash/html中的CGI,我有以下脚本(仅awk脚本,其余代码只是一个简单的hmtl代码): 我的脚本分析许多CSV文件并显示我需要的信息,如下所示:Linux 用我的awk脚本删除无用/空行,linux,bash,csv,awk,Linux,Bash,Csv,Awk,对于bash/html中的CGI,我有以下脚本(仅awk脚本,其余代码只是一个简单的hmtl代码): 我的脚本分析许多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
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变量。它对代码注入更加健壮。您只需执行以下操作:
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/*
对此,您不需要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/*
谢谢@EdMorton!你好您的解决方案工作得很好,但正如您在这里看到的(),即使没有显示无用的行,仍然会生成表!你有什么办法解决这个问题吗?我没有任何关于那个图像的背景。。。你从哪里弄来的?你好!对于您的脚本,如果我的脚本找不到信息,则可以不显示“Date===XXX”行。但是,即使没有信息,应该接收信息的html列仍然会生成和显示(即图片右侧的空列),我不知道如何生成这些html列。我认为我们应该看到代码的其余部分,如果您在上面添加一个带有适当标记的其他问题,可能会更具可读性。谢谢@EdMorton!你好您的解决方案工作得很好,但正如您在这里看到的(),即使没有显示无用的行,仍然会生成表!你有什么办法解决这个问题吗?我没有任何关于那个图像的背景。。。你从哪里弄来的?你好!对于您的脚本,如果我的脚本找不到信息,则可以不显示“Date===XXX”行。但是,即使没有信息,应该接收信息的html列仍然会生成和显示(即图片右侧的空列),我不知道如何生成这些html列。我认为我们应该看到代码的其余部分,如果您在上面添加一个带有适当标记的其他问题,那么代码的可读性可能会更高。您好!谢谢你的帮助!非常有用!!你能不能快速解释一下这些行的功能:“test=“$test”'FNR==1{doneHdr=0}$0~test{if(!doneHdr++)”?非常感谢!
-v test=“$test”
正在将一个名为test
的awk变量设置为您现有的shell变量(也名为test
)-请参阅。$0~test
只是更正了您现有/'$test'/
的语法。`FNR==1{doneHdr=0}`正在读取每个新输入文件的开始时清除一个标志。如果(!doneHdr++)x
将执行x
并在第一次点击时将标志设置为1,之后x
将不会在标志为非零时再次执行(即对于当前输入文件的其余部分)。您好!感谢您的帮助!非常有帮助!!您能否快速解释这些行的功能:“test=“$test”'FNR==1{doneHdr=0}$0~test{if(!doneHdr++)“?非常感谢!-v test=“$test”
正在将一个名为test
的awk变量设置为您现有的shell变量(也称为test
)的级别,请参见。$0~test
只是对您现有的/'$test'//code>`FNR==1的语法进行了更正{doneHdr=0}`正在读取每个新输入文件的开始时清除一个标志。如果(!doneHdr++)x
将执行x
并在第一次命中该标志时将其设置为1,此后x
将不再执行,而标志为非零(即对于当前输入文件的其余部分)。