Linux awk中基于两列的增量变量
我正在编写一个Linux awk中基于两列的增量变量,linux,shell,variables,awk,count,Linux,Shell,Variables,Awk,Count,我正在编写一个awk脚本,该脚本解析CSV文件,比较一列包含日期,另一列包含活动类型,然后打印特定活动的计数 我写的代码是: NOW=$(date --date="5 days ago" +"%Y%m%d") awk -F "," -v mydate=$NOW '{ var_1=1; var_2=1;} { if ( substr($8,2,8) == mydate ) { if ( $6 == 1001 ) {
awk
脚本,该脚本解析CSV文件,比较一列包含日期,另一列包含活动类型,然后打印特定活动的计数
我写的代码是:
NOW=$(date --date="5 days ago" +"%Y%m%d")
awk -F "," -v mydate=$NOW '{
var_1=1;
var_2=1;} {
if ( substr($8,2,8) == mydate ) {
if ( $6 == 1001 ) {
var_1++;
}
else if ( $6 == 1003 ) {
var_2++;
}
}
print var_1 var_2
}' *.csv
我得到的输出是
11
11
11
11
11
11
我相信这个问题与我定义var_1
和var_2
的方式有关;他们被重新初始化了
另外,我只想打印var_1
和var_2
的最终值;目前,它在awk
的每次迭代中都会被打印出来
有什么建议吗?在每行数据上执行两个块:
{var_1=1;var_2=1;}
在每次传递时将变量设置为1{
如果(substr($8,2,8)==mydate){
如果($6==1001){
var_1++;
}
否则,如果($6==1003){
var_2++;
}
}
打印变量1变量2
}
将var_1
和var_2
的值打印为串联字符串(因此1和1之间没有空格)substr()
条件或$6
条件从未匹配过
您可能希望在第一个块之前开始,但为什么从1开始而不是从0开始并不明显。如果从0开始计数,则不需要开始块。您可能应该使用print var_1、var_2
来分隔这两个值
至于匹配项不匹配的原因,没有任何示例数据可供处理,但您可以通过为每行打印$8
和$6
进行调试(还有mydate
;可能还有substr($8,2,8)
),这样您就可以看到发生了什么
如果只希望在末尾打印值,则(在调试了主操作期间发生的事情之后),可以将打印
放在结束块中:
END { print var_1, var_2 }
谢谢,开始,结束是我一直在寻找的。条件很好。