如何在Bash中使用AWK使用2个键提取值?
我想使用Bash脚本来创建一个csv文件。 该脚本仅读取$1、$2和$4 我想用1美元,2美元作为钥匙 价值4美元,但如果有“关键”记录 然后将其打印为$1、$2,“关键”一行。 但不是使用“==”,“=~”对awk不起作用。 “包含”在此时无法正常工作 如果有人能帮我解决这个问题,我将不胜感激 ''' 输入 A, SVC-ID01, Critical A, SVC-ID01, Info A, SVC-ID01, Good A, SVC-ID01, Good A, SVC-ID01, Good A, SVC-ID02, Info A, SVC-ID02, Info A, SVC-ID02, Good B, SVC-ID-03, Good B, SVC-ID-03, Good B, SVC-ID-03, Good B, SVC-ID-04, Info B, SVC-ID-04, Info B, SVC-ID-04, Good B, SVC-ID-04, Info A, SVC-ID01, Critical A, SVC-ID02, Info B, SVC-ID-03, Good B, SVC-ID-04, Info 输出 A, SVC-ID01, Critical A, SVC-ID01, Info A, SVC-ID01, Good A, SVC-ID01, Good A, SVC-ID01, Good A, SVC-ID02, Info A, SVC-ID02, Info A, SVC-ID02, Good B, SVC-ID-03, Good B, SVC-ID-03, Good B, SVC-ID-03, Good B, SVC-ID-04, Info B, SVC-ID-04, Info B, SVC-ID-04, Good B, SVC-ID-04, Info A, SVC-ID01, Critical A, SVC-ID02, Info B, SVC-ID-03, Good B, SVC-ID-04, Info A、 SVC-ID01,临界 A、 SVC-ID02,信息 B、 SVC-ID-03,很好 B、 SVC-ID-04,信息如何在Bash中使用AWK使用2个键提取值?,awk,Awk,我想使用Bash脚本来创建一个csv文件。 该脚本仅读取$1、$2和$4 我想用1美元,2美元作为钥匙 价值4美元,但如果有“关键”记录 然后将其打印为$1、$2,“关键”一行。 但不是使用“==”,“=~”对awk不起作用。 “包含”在此时无法正常工作 如果有人能帮我解决这个问题,我将不胜感激 ''' 输入 A, SVC-ID01, Critical A, SVC-ID01, Info A, SVC-ID01, Good A, SVC-ID01, Good A, SVC-ID01, Good
''您没有4列,如果未设置
临界值
或信息
,则为数组分配$3
。字段分隔符看起来应该是,“
,否则您需要在“Critial”
和“Info”
上进行匹配
例如:
awk -F ", " '{
arr[$1", "$2];
if ($3 == "Critical" || arr2[$1", "$2] == "Critical")
{
arr2[$1", "$2]="Critical";
}
else if (arr2[$1", "$2] != "Info")
{
arr2[$1", "$2]=$3;
}
}
END {for (i in arr) {print i "" arr[i] ", " arr2[i]} }' ${filename} | sort $2
我将使用两个查找表将“Critical”设置为“max”值:
awk'
开始{
FS=子SP=OFS=“,”
状态[“良好”]=1;查找[1]=“良好”
状态[“信息”]=2;查找[2]=“信息”
状态[“关键”]=3;查找[3]=“关键”
}
值[$1,$2]<状态[$3]{value[$1,$2]=状态[$3]}
结束{
PROCINFO[“排序在”]=“@ind\u str\u asc”
对于(输入值)打印键,请查阅[值[键]]
}
"输入,
这个输出
A,SVC-ID01,严重
A、 SVC-ID02,信息
B、 SVC-ID-03,很好
B、 SVC-ID-04,信息
输出:
B, SVC-ID-03, Good
B, SVC-ID-04, Info
A, SVC-ID01, Critical
A, SVC-ID02, Info
输出看起来是随机的,您可以通过管道将输出传输到排序
。如果数据像示例中那样预先排序,则可以使用以下命令并跳过排序
:
$ awk '{
if($1 OFS $2!=p && FNR>1) {
print p,b
b=""
}
if(b==""||$3=="Critical"||$3=="Info"&&b!="Critical"||b=="")
b=$3
p=$1 OFS $2
}
END {
print $1,$2,b
}' file
@Sheller哦,是的,有一个打字错误,我只在一个地方写了。谢谢你的提醒<
bash
中的code>awk没有任何意义。Awk本身就是一个二进制文件,随着时间的推移,它已经通过了多个外壳,它的工作通常不依赖外壳的味道。@Inian NOOOO,我离golden bash徽章太近了!:D@JamesBrown当前位置我相信你会在本周内收到。有边框的没问题,但这与当前的shell无关all@Inian当然可以。让它更有价值。