我有2个单独的文件lostType.txt(显示所选的选项)和lost.txt(显示内存泄漏)我使用dialog来创建GUI。使用复选框,我从用户那里获取一些数字间隔来限制将要打印的内存泄漏。我要做的是,打印内存泄漏为选定大小的行,泄漏类型为lostType.txt
例如,这是lost.txt
LEAK SUMMARY
100 bytes definitely lost
0 bytes indirectly lost
0 bytes possibly lost
100 bytes still reachable
0 bytes suppressed
如果用户希望看到definetely丢失和间接丢失,lostType.txt
具有以下内容
definetely
indirectly
假设用户选择查看泄漏,其中大小介于0到10个字节或100和250个字节之间。现在输出必须是100 bytes in 1 blocks definitely lost
到目前为止,我所做的是以下内容,
for choice in $choices
do
case $choice in
1)
#"Memory Leak <= 10 Byte"
cat lost.txt | awk '{
if ($1 <= 10 && $1 > 0 )
print $1,$2" ==>",$3,$4
}'
;;
2)
#"10 Byte < Memory Leak <= 50 Byte"
cat lost.txt | awk '{
if ($1 <= 50 && $1 > 10 )
print $1,$2" ==>",$3,$4
}'
;;
也就是说,根据所选的大小间隔,我可以打印这些值。但是,我找不到寻找lostType的方法(上层代码为3美元)。我需要做的是在awk中搜索文件,如
cat lost.txt | awk '{
if ($1 <= 50 && $1 > 10 AND IF $3 IS IN lostType.txt)
print $1,$2" ==>",$3,$4
}'
;;
所以我的问题是,如何在awk中搜索文件?
答案 0 :(得分:1)
如果我理解您的问题,则以下awk
命令应该有效。您必须提供两个输入文件。丢失的类型保存在散列中,并将密钥与另一个的第三个字段进行比较。
awk '
FNR == NR { type[ $1 ] = 1; next }
$1 > 10 && $1 < 200 && type[ $3 ] { print $1,$2 " ==> " $3,$4 }
' lostType.txt lost.txt
但是这样你就可以解析每个case
选项。在我看来,应该是一个更好的解决方案,将这些变量传递给awk
命令并只运行一次。
case $choice in
1)
limit_inf=0
limit_sup=10
break
;;
2)
limit_inf=10
limit_sup=50
break
;;
...
然后:
awk -v li="$limit_inf" -v ls="$limit_sup" '
FNR == NR { type[ $1 ] = 1; next }
$1 > li && $1 < ls && type[ $3 ] { print $1,$2 " ==> " $3,$4 }
' lostType.txt lost.txt