awk计数总和和唯一改进命令
希望根据第二列、行项目计数、第三列总和和第一列的唯一值进行打印。有大约100个输入测试文件且未排序。。 我用下面3个命令来实现所需的输出,想知道最简单的方法 输入测试*.txtawk计数总和和唯一改进命令,awk,Awk,希望根据第二列、行项目计数、第三列总和和第一列的唯一值进行打印。有大约100个输入测试文件且未排序。。 我用下面3个命令来实现所需的输出,想知道最简单的方法 输入测试*.txt abc,xx,5,sss abc,yy,10,sss def,xx,15,sss def,yy,20,sss abc,xx,5,sss abc,yy,10,sss def,xx,15,sss def,yy,20,sss ghi,zz,10,sss 第1步: 作品#1 第2步 作品2 第三步 作品3 期望输出: xx,4
abc,xx,5,sss
abc,yy,10,sss
def,xx,15,sss
def,yy,20,sss
abc,xx,5,sss
abc,yy,10,sss
def,xx,15,sss
def,yy,20,sss
ghi,zz,10,sss
第1步:
作品#1
第2步
作品2
第三步
作品3
期望输出:
xx,4,40,2
yy,4,60,2
zz,1,10,1
寻找建议
BEGIN { FS = OFS = "," }
{ ++lines[$2]; if (!seen[$2,$1]++) ++diff[$2]; count[$2]+=$3 }
END { for(i in lines) print i, lines[i], count[i], diff[i] }
跟踪第2列中每个值的出现次数行
记录第二列和第一列的唯一组合,只要找到唯一组合,就会递增seen
。diff[$2]
之后的seen[$2,$1]
意味着该条件只有在第一次找到组合时才为真,因为seen[$2,$1]的值将增加到1和!所见[$2,$1]将为假++
保存第三列的总数count
使用
awk
:
$ awk '
BEGIN { FS = OFS = "," }
{ keys[$2]++; sum[$2]+=$3 } !seen[$1,$2]++ { count[$2]++ }
END { for(key in keys) print key, keys[key], sum[key], count[key] }
' file
xx,4,40,2
yy,4,60,2
zz,1,10,1
在开始
块中将输入和输出字段分隔符设置为,
。我们使用数组键
来识别和计数键<代码>总和数组保留每个键的总和count
允许我们跟踪每列2值的唯一列1
abc xx
abc yy
def xx
def yy
ghi zz
awk '{print $2}' Op_UniqTest2.txt | sort | uniq -c
2 xx
2 yy
1 zz
xx,4,40,2
yy,4,60,2
zz,1,10,1
BEGIN { FS = OFS = "," }
{ ++lines[$2]; if (!seen[$2,$1]++) ++diff[$2]; count[$2]+=$3 }
END { for(i in lines) print i, lines[i], count[i], diff[i] }
$ awk -f avn.awk file
xx,4,40,2
yy,4,60,2
zz,1,10,1
$ awk '
BEGIN { FS = OFS = "," }
{ keys[$2]++; sum[$2]+=$3 } !seen[$1,$2]++ { count[$2]++ }
END { for(key in keys) print key, keys[key], sum[key], count[key] }
' file
xx,4,40,2
yy,4,60,2
zz,1,10,1