Ubuntu下使用awk基于两列条件给CSV新增Labelled列求助
解决CSV新增标记列的awk命令问题
你的命令存在几个关键问题,导致无法正确生成目标列:
- 未指定CSV的逗号分隔符,awk默认用空白符分割字段,导致第22、23列的识别完全错误
- 逻辑判断用了
||(或),但需求是同时满足两个条件,应该用&&(且) - 表头命名错误,应该是
Labelled而非merge,且未保持逗号分隔格式 - 未处理不满足条件的行,CSV结构会混乱
正确的awk命令
BEGIN{FS=OFS=","} NR==1 { $24="Labelled" print next } { $24 = ($22 == "Malicious" && $23 == "C&C-FileDownload") ? 1 : "" print } Malware-44-1.csv > test1.csv
命令说明
BEGIN{FS=OFS=","}:强制awk用逗号作为输入和输出的字段分隔符,适配CSV格式- 表头行处理:给第24列设置正确的表头
Labelled,打印后跳过后续逻辑 - 数据行处理:用三元运算符判断,当第22列是
Malicious且第23列是C&C-FileDownload时,第24列设为1,否则留空(如果需要默认值0,把""改成0即可) - 最后打印每一行,保证CSV格式完整
内容的提问来源于stack exchange,提问作者ned692000
相关产品推荐
相关产品推荐

