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