如何根据不同的列值从 CSV 文件中选择行?

如何根据不同的列值从 CSV 文件中选择行?

我有一个 CSV 文件,其值如下:

col1,col2,col3,col4,col5,col6,col7
1,0,0,0,0,BTS,Active
4,5,3,1,1,LocalMode,Offlne
1,2,5,6,3,PermFault,Offline
1,2,6,6,2,BSC,Active
7,8,2,3,2,NE,Offline
1,7,6,5,2,BSC,Active

我想以满足以下示例条件的方式从此 CSV 文件中获取值行:

1)如果(col7="Active")则所有行的col1值的总和

2) if (col6 == somevalue && column5 != somevalues) 则所有行的 col1 值之和。

我可以使用以下 awk 命令根据满足第一个条件的一列值从 CSV 文件中获取行:

awk -F, '$7 == "Active" { print }' test.csv

我如何在这个 awk 命令中使用多个条件来检查多个列值,如上面示例条件 2 中提到的,其中我需要检查 col6 中某些特定文本的存在,同时我需要忽略第 5 列中的一些关键字。除了 awk 之外,还有更好、更简单的方法吗?

答案1

AWK 编程语言:

最简单的 awk 程序是一系列模式操作语句:
pattern { action }
pattern { action }
...

所以,您可以尝试以下操作:

awk -F, '
         $7 == "Active" { x += $1; };
         $6 == "value6" && $5 != value5 { y += $1; };
         END { print x, y; }
        ' file

相关内容