awk计数总和和唯一改善命令-Con:
要根据第二列和第四列、行项目计数、第三列和第一列的唯一值打印 Input.csvawk计数总和和唯一改善命令-Con:,awk,Awk,要根据第二列和第四列、行项目计数、第三列和第一列的唯一值打印 Input.csv abc,xx,5,Jan-2014 abc,yy,10,Jan-2014 def,xx,15,Jan-2014 def,yy,20,Jan-2014 abc,xx,5,Jan-2014 abc,yy,10,Jan-2014 def,xx,15,Jan-2014 def,yy,20,Jan-2014 ghi,zz,10,Jan-2014 abc,xx,5,Feb-2014 abc,yy,10,Feb-2014 def
abc,xx,5,Jan-2014
abc,yy,10,Jan-2014
def,xx,15,Jan-2014
def,yy,20,Jan-2014
abc,xx,5,Jan-2014
abc,yy,10,Jan-2014
def,xx,15,Jan-2014
def,yy,20,Jan-2014
ghi,zz,10,Jan-2014
abc,xx,5,Feb-2014
abc,yy,10,Feb-2014
def,xx,15,Feb-2014
def,yy,20,Feb-2014
abc,xx,5,Feb-2014
abc,yy,10,Feb-2014
def,xx,15,Feb-2014
def,yy,20,Feb-2014
ghi,zz,10,Feb-2014
尝试#1:
尝试#2:
尝试#3:
期望输出:
xx,Jan-2014,4,40,2
yy,Jan-2014,4,60,2
zz,Jan-2014,1,10,1
xx,Feb-2014,4,40,2
yy,Feb-2014,4,60,2
zz,Feb-2014,1,10,1
寻找你的建议 试试看:
awk '{i=$2 FS $4; S[i]+=$3} !A[$1,i]++{C[i]++} END{for(i in S) print i, S[i], C[i]}' FS=, OFS=, file
多行:
awk '
BEGIN {
FS=OFS=","
}
{
idx=$2 FS $4
Sum[idx]+=$3
}
!Seen[$1,idx]++ {
Count[idx]++
}
END {
for(idx in Sum) print idx, Sum[idx], Count[idx]
}
' file
输出:
xx,Feb-2014,40,2
zz,Feb-2014,10,1
yy,Feb-2014,60,2
yy,Jan-2014,60,2
xx,Jan-2014,40,2
zz,Jan-2014,10,1
尝试:
多行:
awk '
BEGIN {
FS=OFS=","
}
{
idx=$2 FS $4
Sum[idx]+=$3
}
!Seen[$1,idx]++ {
Count[idx]++
}
END {
for(idx in Sum) print idx, Sum[idx], Count[idx]
}
' file
输出:
xx,Feb-2014,40,2
zz,Feb-2014,10,1
yy,Feb-2014,60,2
yy,Jan-2014,60,2
xx,Jan-2014,40,2
zz,Jan-2014,10,1
尝试:
多行:
awk '
BEGIN {
FS=OFS=","
}
{
idx=$2 FS $4
Sum[idx]+=$3
}
!Seen[$1,idx]++ {
Count[idx]++
}
END {
for(idx in Sum) print idx, Sum[idx], Count[idx]
}
' file
输出:
xx,Feb-2014,40,2
zz,Feb-2014,10,1
yy,Feb-2014,60,2
yy,Jan-2014,60,2
xx,Jan-2014,40,2
zz,Jan-2014,10,1
尝试:
多行:
awk '
BEGIN {
FS=OFS=","
}
{
idx=$2 FS $4
Sum[idx]+=$3
}
!Seen[$1,idx]++ {
Count[idx]++
}
END {
for(idx in Sum) print idx, Sum[idx], Count[idx]
}
' file
输出:
xx,Feb-2014,40,2
zz,Feb-2014,10,1
yy,Feb-2014,60,2
yy,Jan-2014,60,2
xx,Jan-2014,40,2
zz,Jan-2014,10,1
如果输出顺序至关重要,则可以执行以下操作:
awk '
BEGIN { SUBSEP = FS = OFS = "," }
!seen[$1,$2,$4]++ { count[$2,$4]++ }
!patt[$2,$4]++ { order[++nr] = $2 FS $4 }
{ values[$2,$4]++; sum[$2,$4]+=$3 }
END {
for (idx=1; idx<=nr; idx++)
print order[idx], values[order[idx]], sum[order[idx]], count[order[idx]]
}' file
xx,Jan-2014,4,40,2
yy,Jan-2014,4,60,2
zz,Jan-2014,1,10,1
xx,Feb-2014,4,40,2
yy,Feb-2014,4,60,2
zz,Feb-2014,1,10,1
awk'
开始{SUBSEP=FS=OFS=“,”}
!看到[$1,$2,$4]+{count[$2,$4]+}
!patt[$2,$4]+{order[++nr]=$2fs$4}
{值[$2,$4]++;和[$2,$4]+=$3}
结束{
对于(idx=1;idx如果输出顺序至关重要,则可以执行以下操作:
awk '
BEGIN { SUBSEP = FS = OFS = "," }
!seen[$1,$2,$4]++ { count[$2,$4]++ }
!patt[$2,$4]++ { order[++nr] = $2 FS $4 }
{ values[$2,$4]++; sum[$2,$4]+=$3 }
END {
for (idx=1; idx<=nr; idx++)
print order[idx], values[order[idx]], sum[order[idx]], count[order[idx]]
}' file
xx,Jan-2014,4,40,2
yy,Jan-2014,4,60,2
zz,Jan-2014,1,10,1
xx,Feb-2014,4,40,2
yy,Feb-2014,4,60,2
zz,Feb-2014,1,10,1
awk'
开始{SUBSEP=FS=OFS=“,”}
!看到[$1,$2,$4]+{count[$2,$4]+}
!patt[$2,$4]+{order[++nr]=$2fs$4}
{值[$2,$4]++;和[$2,$4]+=$3}
结束{
对于(idx=1;idx如果输出顺序至关重要,则可以执行以下操作:
awk '
BEGIN { SUBSEP = FS = OFS = "," }
!seen[$1,$2,$4]++ { count[$2,$4]++ }
!patt[$2,$4]++ { order[++nr] = $2 FS $4 }
{ values[$2,$4]++; sum[$2,$4]+=$3 }
END {
for (idx=1; idx<=nr; idx++)
print order[idx], values[order[idx]], sum[order[idx]], count[order[idx]]
}' file
xx,Jan-2014,4,40,2
yy,Jan-2014,4,60,2
zz,Jan-2014,1,10,1
xx,Feb-2014,4,40,2
yy,Feb-2014,4,60,2
zz,Feb-2014,1,10,1
awk'
开始{SUBSEP=FS=OFS=“,”}
!看到[$1,$2,$4]+{count[$2,$4]+}
!patt[$2,$4]+{order[++nr]=$2fs$4}
{值[$2,$4]++;和[$2,$4]+=$3}
结束{
对于(idx=1;idx如果输出顺序至关重要,则可以执行以下操作:
awk '
BEGIN { SUBSEP = FS = OFS = "," }
!seen[$1,$2,$4]++ { count[$2,$4]++ }
!patt[$2,$4]++ { order[++nr] = $2 FS $4 }
{ values[$2,$4]++; sum[$2,$4]+=$3 }
END {
for (idx=1; idx<=nr; idx++)
print order[idx], values[order[idx]], sum[order[idx]], count[order[idx]]
}' file
xx,Jan-2014,4,40,2
yy,Jan-2014,4,60,2
zz,Jan-2014,1,10,1
xx,Feb-2014,4,40,2
yy,Feb-2014,4,60,2
zz,Feb-2014,1,10,1
awk'
开始{SUBSEP=FS=OFS=“,”}
!看到[$1,$2,$4]+{count[$2,$4]+}
!patt[$2,$4]+{order[++nr]=$2fs$4}
{值[$2,$4]++;和[$2,$4]+=$3}
结束{
对于(idx=1;idx@EdMorton是的,这是一个很好的建议。使用由subsp
分隔的组合键总是能帮我完成任务,所以我从来没有真正使用过awk
中的真正多维数组。我想我应该开始读它了。:)
2-D数组对于许多常见应用程序非常有用。类似于使用伪2d数组在多行上读取公共密钥的val的应用程序:a[$1]=($1 in a?a[$1]RS:)$2;…END{for(key in a){split(a[key],tmp,RS);for(i=1;i in tmp;i++){val=tmp[i];print key,val}}
使用true-2d数组变得更简单:a[$1][$2];…END{for(a中的键)for(a中的val])打印键,val}
。可能有语法错误或2个,但你明白了。让我们一起来。@EdMorton是一个好建议。使用由子集隔开的复合键总是能帮我完成任务,所以我从来没有真正在awk
中使用过真正的多维数组。我想我应该开始阅读它。:)
2-D数组对于许多常见应用程序非常有用。类似于使用伪2d数组在多行上读取公共密钥的val的应用程序:a[$1]=($1 in a?a[$1]RS:)$2;…END{for(key in a){split(a[key],tmp,RS);for(i=1;i in tmp;i++){val=tmp[i];print key,val}}
使用true-2d数组变得更简单:a[$1][$2];…END{for(a中的键)for(a中的val])打印键,val}
。可能有语法错误或2个,但你明白了。让我们一起来。@EdMorton是一个好建议。使用由子集隔开的复合键总是能帮我完成任务,所以我从来没有真正在awk
中使用过真正的多维数组。我想我应该开始阅读它。:)
2-D数组对于许多常见应用程序非常有用。类似于使用伪2d数组在多行上读取公共密钥的val的应用程序:a[$1]=($1 in a?a[$1]RS:)$2;…END{for(key in a){split(a[key],tmp,RS);for(i=1;i in tmp;i++){val=tmp[i];print key,val}}
使用true-2d数组变得更简单:a[$1][$2];…END{for(a中的键)for(a中的val])打印键,val}
。可能有语法错误或2个,但你明白了。让我们一起来。@EdMorton是一个好建议。使用由子集隔开的复合键总是能帮我完成任务,所以我从来没有真正在awk
中使用过真正的多维数组。我想我应该开始阅读它。:)
2-D数组对于许多常见应用程序非常有用。类似于使用伪2d数组在多行上读取公共密钥的val的应用程序:a[$1]=($1 in a?a[$1]RS:)$2;…END{for(key in a){split(a[key],tmp,RS);for(i=1;i in tmp;i++){val=tmp[i];print key,val}}
使用true-2d数组变得更简单:a[$1][$2];…END{for(a中的键)for(a中的val])print key,val}
。可能有语法错误,或者其中有2个,但您明白了。让我们来看看。