Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash 计算给定另一个字段值的字段的发生次数_Bash_Unix_Design Patterns_Scripting_Awk - Fatal编程技术网

Bash 计算给定另一个字段值的字段的发生次数

Bash 计算给定另一个字段值的字段的发生次数,bash,unix,design-patterns,scripting,awk,Bash,Unix,Design Patterns,Scripting,Awk,我有一个制表符分隔的表,如下所示 402 Tea Bags 4 403 Tea Bags 4 404 Tea Bags 3 405 Milk 3 406 Sugar 4 407 Sugar 3 408 Sugar 4 409 Milk 4 410 Milk 3 411 Milk 3 我想在第三个场的条件下计算第二个场的出现率。第三个字段为3和4时茶包出现的示例数。如 $3==4 && $2=="Tea Bags"; coun

我有一个制表符分隔的表,如下所示

402 Tea Bags    4
403 Tea Bags    4
404 Tea Bags    3
405 Milk    3
406 Sugar   4
407 Sugar   3
408 Sugar   4
409 Milk    4
410 Milk    3
411 Milk    3
我想在第三个场的条件下计算第二个场的出现率。第三个字段为3和4时茶包出现的示例数。如

$3==4 && $2=="Tea Bags"; count ++
第三个字段中可以有两个以上的数字,第二列中可以有3个以上的选项

然后我想最后把它们列为

Tea Bags    4  2
Tea Bags    3  1
Milk    3  3
Milk    4  1
Sugar   4  2
Sugar   3  1
我可以使用awk单独计算它们

awk -F "\t" '{for(i=1; i<=NF; i++) 
    if(($i=="Tea Bags" && ($(i+1)==3))) c++ } 
   END{ print c }' file.txt 

awk-F“\t”{for(i=1;i这是你想要的吗

BEGIN {FS="\t"; OFS="\t"}

{a[$2,$3]++}

END {
    for (k in a) {
        split(k, p, SUBSEP)
        print p[1], p[2], a[k]
    }
}
交替书写(以避免拆分/细分)


这是你想要的吗

BEGIN {FS="\t"; OFS="\t"}

{a[$2,$3]++}

END {
    for (k in a) {
        split(k, p, SUBSEP)
        print p[1], p[2], a[k]
    }
}
交替书写(以避免拆分/细分)


这是你想要的吗

BEGIN {FS="\t"; OFS="\t"}

{a[$2,$3]++}

END {
    for (k in a) {
        split(k, p, SUBSEP)
        print p[1], p[2], a[k]
    }
}
交替书写(以避免拆分/细分)


这是你想要的吗

BEGIN {FS="\t"; OFS="\t"}

{a[$2,$3]++}

END {
    for (k in a) {
        split(k, p, SUBSEP)
        print p[1], p[2], a[k]
    }
}
交替书写(以避免拆分/细分)


使用此awk命令:

awk -F "\t" '{k=$2 FS $3; if (!(k in a)) s[j++]=k; a[k]++} 
             END {for (i=0; i<length(s); i++) print s[i], a[s[i]]}' OFS="\t" file

Tea Bags        4       2
Tea Bags        3       1
Milk    3       3
Sugar   4       2
Sugar   3       1
Milk    4       1
awk-F“\t”{k=$2fs$3;if(!(a中的k))s[j++]=k;a[k]++}

使用此awk命令结束{for(i=0;i):

awk -F "\t" '{k=$2 FS $3; if (!(k in a)) s[j++]=k; a[k]++} 
             END {for (i=0; i<length(s); i++) print s[i], a[s[i]]}' OFS="\t" file

Tea Bags        4       2
Tea Bags        3       1
Milk    3       3
Sugar   4       2
Sugar   3       1
Milk    4       1
awk-F“\t”{k=$2fs$3;if(!(a中的k))s[j++]=k;a[k]++}

使用此awk命令结束{for(i=0;i):

awk -F "\t" '{k=$2 FS $3; if (!(k in a)) s[j++]=k; a[k]++} 
             END {for (i=0; i<length(s); i++) print s[i], a[s[i]]}' OFS="\t" file

Tea Bags        4       2
Tea Bags        3       1
Milk    3       3
Sugar   4       2
Sugar   3       1
Milk    4       1
awk-F“\t”{k=$2fs$3;if(!(a中的k))s[j++]=k;a[k]++}

使用此awk命令结束{for(i=0;i):

awk -F "\t" '{k=$2 FS $3; if (!(k in a)) s[j++]=k; a[k]++} 
             END {for (i=0; i<length(s); i++) print s[i], a[s[i]]}' OFS="\t" file

Tea Bags        4       2
Tea Bags        3       1
Milk    3       3
Sugar   4       2
Sugar   3       1
Milk    4       1
awk-F“\t”{k=$2fs$3;if(!(a中的k))s[j++]=k;a[k]++}

END{for(i=0;i使用关联数组的Bash解决方案:

declare -A count

while IFS=$'\t'; read col1 col23 ; do
  ((count[$col23]++))                 # use col 2 and 3 as key
done < "$infile"

for key in "${!count[@]}"; do
  echo -e "$key\t${count[$key]}"
done

使用关联数组的Bash解决方案:

declare -A count

while IFS=$'\t'; read col1 col23 ; do
  ((count[$col23]++))                 # use col 2 and 3 as key
done < "$infile"

for key in "${!count[@]}"; do
  echo -e "$key\t${count[$key]}"
done

使用关联数组的Bash解决方案:

declare -A count

while IFS=$'\t'; read col1 col23 ; do
  ((count[$col23]++))                 # use col 2 and 3 as key
done < "$infile"

for key in "${!count[@]}"; do
  echo -e "$key\t${count[$key]}"
done

使用关联数组的Bash解决方案:

declare -A count

while IFS=$'\t'; read col1 col23 ; do
  ((count[$col23]++))                 # use col 2 and 3 as key
done < "$infile"

for key in "${!count[@]}"; do
  echo -e "$key\t${count[$key]}"
done

这个awk一号班轮怎么样:

 awk '{sub(/\S*\t/,"");a[$0]++}END{for(x in a)print x, a[x]}' file

这个awk一号班轮怎么样:

 awk '{sub(/\S*\t/,"");a[$0]++}END{for(x in a)print x, a[x]}' file

这个awk一号班轮怎么样:

 awk '{sub(/\S*\t/,"");a[$0]++}END{for(x in a)print x, a[x]}' file

这个awk一号班轮怎么样:

 awk '{sub(/\S*\t/,"");a[$0]++}END{for(x in a)print x, a[x]}' file

当您说
时,第三个字段中可能有两个以上的数字,第二列中可能有三个以上的选项。
您的意思是第二个字段的可能性大于您显示的三个字段(牛奶、茶包和糖),同样地,第三列的可能性大于两个字段(3和4)您已经显示了吗?第二个字段中的选项数永远不会大于第三个。当您说
时,第三个字段中可以有两个以上的数字,第二列中可以有三个以上的选项。
您的意思是第二个字段的可能性大于三个字段(牛奶、茶包和糖)你已经展示了,同样的,第三列比第二列(3和4)有两种以上的可能性您已经显示了吗?第二个字段中的选项数永远不会大于第三个。当您说
时,第三个字段中可以有两个以上的数字,第二列中可以有三个以上的选项。
您的意思是第二个字段的可能性大于三个字段(牛奶、茶包和糖)你已经展示了,同样的,第三列比第二列(3和4)有两种以上的可能性您已经显示了吗?第二个字段中的选项数永远不会大于第三个。当您说
时,第三个字段中可以有两个以上的数字,第二列中可以有三个以上的选项。
您的意思是第二个字段的可能性大于三个字段(牛奶、茶包和糖)你已经展示了,同样的,第三列比第二列(3和4)有两种以上的可能性您已经显示了吗?第二个字段中的选项数永远不会大于第三个。谢谢,但我如何安排使两个牛奶聚集在一起。只有在第一个项目的计数完成后,才能开始下一个项目?@LoveDestination最简单的方法是将输出传送到
排序
谢谢,但我如何安排使两个牛奶聚集在一起。下一步只有在第一个物品计数完成后才能启动物品?@LoveDestination最简单的方法是将输出传送到
排序
谢谢,但我如何安排使两个牛奶聚集在一起。只有在第一个物品计数完成后才启动下一个物品?@LoveDestination最简单的方法是将输出传送到
排序
谢谢,但我如何安排使两个牛奶聚集在一起。只有在第一个项目的计数完成后,才能开始下一个项目?最简单的方法是将输出输送到
sort