awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法
awk '{pattern + action}' {filenames}
尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
使用awk对列数据求和
对某一列进行求和
测试数据
在test01.txt
里写入测试数据。
echo "10,20,30" >> test01.txt
echo "40,50,60" >> test01.txt
echo "70,80,90" >> test01.txt
这个文件有三行,每行有三个字段,用逗号分隔。如果我们想要计算第三列的和,也就是30+60+90=180。我们可以使用以下awk命令:
awk -F',' '{sum+=$3} END {print sum}' test01.txt
• -F’,':指定逗号为字段分隔符。
• {sum+=$3}:对每一行,将第三个字段的值累加到变量sum中。
• END {print sum}:在处理完所有行后,打印变量sum的值。
对某一列相同字段进行求和
测试数据
在test02.txt
里写入测试数据。
echo "apple,10
banana,20
orange,30
apple,15
banana,25
orange,35" > test02.txt
这个文件有六行,每行有两个字段,用逗号分隔。我们想要计算第一列相同字段的第二列的和,也就是apple的10+15=25,banana的20+25=45,orange的30+35=65。我们可以使用以下awk命令:
awk -F',' '{sum[$1]+=$2} END {for (i in sum) print i, sum[i]}' test02.txt
• -F’,':指定逗号为字段分隔符。
• {sum[$1]+=$2}:对每一行,将第二个字段的值累加到以第一个字段为键的数组sum中。
• END {for (i in sum) print i, sum[i]}:在处理完所有行后,遍历数组sum,并打印每个键和对应的值。