Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 改进AWK脚本-比较和添加字段_Unix_Awk_Gawk - Fatal编程技术网

Unix 改进AWK脚本-比较和添加字段

Unix 改进AWK脚本-比较和添加字段,unix,awk,gawk,Unix,Awk,Gawk,我有一个用分号分隔的CSV文件,该文件包含对客户评论的情绪分析 视图按字段1和6分组,我要做的是添加组中每行的最后字段,然后将总和与字段3进行比较。如果它们匹配,则比较值等于1(如果不是0)。 同时,我还比较了应用上述相同规则的字段6和字段7 最后,分别计算两次比较得到的数量 下面我有一个脚本,但我认为它可以改进。有什么建议吗?此外,我也不确定脚本是否良好 BEGIN { OFS=FS=";"; flag=""; counter1=0; counter2=0;

我有一个用分号分隔的CSV文件,该文件包含对客户评论的情绪分析

视图按字段1和6分组,我要做的是添加组中每行的最后字段,然后将总和与字段3进行比较。如果它们匹配,则比较值等于1(如果不是0)。 同时,我还比较了应用上述相同规则的字段6和字段7

最后,分别计算两次比较得到的数量

下面我有一个脚本,但我认为它可以改进。有什么建议吗?此外,我也不确定脚本是否良好

BEGIN {
    OFS=FS=";";
    flag="";
    counter1=0;
    counter2=0;
    counter3=0; 
}

{
    number=$1;
    topic=$6;
    id= number";"topic;

    if (id != flag)
    {
        for (i in topics)
        {
            if ((sum < 0) && (polarity[i] == "negative") || (sum > 0) && (polarity[i] == "positive"))
            {
                hit_2=1;
                counter2++;
            }
            else
            {
                hit_2=0;
            }

            s=split(topics[i],words,";")
            hit_1=0;
            for (k=1;k<=s;k++)
            {
                if ((words[k] == words[k+1]) && (words[k] != "") || (words[k] == "NULL") && (hit_2 == 1))
                {
                    hit_1=1;
                }

            }

            if (hit_1 == 1)
            {
                counter1++;
            }
            print to_print[i]";"hit_1";"hit_2;

        }

        delete topics;
        delete to_print;
        delete polarity;
        counter3++;
        sum="";
        flag=id;
    }
    sum += $(NF-1);
    topics[$1";"$6]=topics[$1";"$6] ";"$6";"$7;
    to_print[$1";"$6]=$1";"$2";"$3";"$4";"$5";"$6
    polarity[$1";"$6]=$3;

}
END {
print ""
print "#### - sentiments: "counter3" - topic: "counter1 " - polarity: "counter2;
}
输出:

100429301;"RESTAURANT#GENERAL";negative;1004293;10042930;place;1;1
100429331;"FOOD#QUALITY";negative;1004293;10042933;food;1;1
103269521;"FOOD#QUALITY";positive;1032695;10326952;duck breast special;0;1

#### - sentiments: 57 - topic: 28 - polarity: 39

我重写了其中的一部分,也许你可以进一步扩展

$ awk -F';' -v OFS=';' '
     {key=$1 FS $3 FS $6;
      sum[key]+=$(NF-1);
      line[key]=$1 FS $2 FS $3 FS $4 FS $5 FS $6;
      sign[key]=($3=="negative"?-1:1)
     }
  END{for(k in sum)
         print line[k],(sum[k]*sign[k]<0?0:1),sum[k],sign[k]}' data

100429301;"RESTAURANT#GENERAL";negative;1004293;10042930;place;1;-1;-1
103269521;"FOOD#QUALITY";positive;1032695;10326952;duck breast special;1;4;1
100429331;"FOOD#QUALITY";negative;1004293;10042933;food;1;-0.4;-1
$awk-F';'-v OFS=';'
{key=$1 FS$3 FS$6;
和[键]+=$(NF-1);
行[键]=$1fs$2fs$3fs$4fs$5fs$6;
符号[键]=($3==“负”?-1:1)
}
结束{for(总和为k)

打印行[k],(求和[k]*符号[k]听起来您应该请求迁移到。对于长度超过两行的脚本,请使用有意义的变量名。像k1、k2、b1、x1、x2、xd、s等名称都没有用处。因此,我必须在该部分中回答同样的问题?
$ awk -F';' -v OFS=';' '
     {key=$1 FS $3 FS $6;
      sum[key]+=$(NF-1);
      line[key]=$1 FS $2 FS $3 FS $4 FS $5 FS $6;
      sign[key]=($3=="negative"?-1:1)
     }
  END{for(k in sum)
         print line[k],(sum[k]*sign[k]<0?0:1),sum[k],sign[k]}' data

100429301;"RESTAURANT#GENERAL";negative;1004293;10042930;place;1;-1;-1
103269521;"FOOD#QUALITY";positive;1032695;10326952;duck breast special;1;4;1
100429331;"FOOD#QUALITY";negative;1004293;10042933;food;1;-0.4;-1