我有一个包含制表符分隔数据的ASCII文件,如下所示:
Test_Version=2.5.3 Model-Manufacturer=D12-500
Test_Version=2.5.3 Model-Manufacturer=D12-500
Test_Version=2.6.3 Model-Manufacturer=H23-600
Test_Version=2.6.3 Model-Manufacturer=HR21-100
Test_Version=2.6.3 Model-Manufacturer=HR21-100
Test_Version=2.6.4 Model-Manufacturer=R16-300
我想用Awk创建一个按“Test_Version”分组的“模型制造商”报告:
Test_Version Model-Manufacturer Count-Model-Manufacturer
2.5.3 D12-500 2
2.6.3 HR21-100 2
2.6.3 H23-600 1
2.6.4 R16-300 1
这是我开始使用的但它不起作用......
awk 'BEGIN {FS="\t";} {vercounts[$1]=vercounts[$1]+1;mdlcounts[$2]=mdlcounts[$2]+1}
END {for (key in vercounts)
printf "%s\t%d\n", key, vercounts[key];} {for (key in mdlcounts) printf "%s\t%d\n", key, mdlcounts[key];}
' data_file
有可能吗?你会怎么做呢?
答案 0 :(得分:2)
我看到它的方式,你真正想要做的是计算重复行的数量。抛弃漂亮的印刷,你真正需要的是:
{ counts[$0]++; }
END { for (key in counts) { print key, counts[key]; } }
或者我在这里误解了什么?
答案 1 :(得分:0)
我不确定我是否理解你的期望。但我认为
{a[$0]++}
END {for (i in a) { print i, a[i]}
}
会做的。
答案 2 :(得分:0)
awk -F '\t' '
{
split($1, ver, /=/)
split($2, model, /=/)
count[ver[2] FS model[2]]++
}
END {for (key in count) print key FS count[key]}
'
答案 3 :(得分:0)
以下一段awk片段将准确提供您正在寻找的内容
awk -F" " '{ vercounts[$0]+=1} END { for ( i in vercounts ) { a=i; gsub("Test_Version=|Model-Manufacturer=","",a) ; print a,vercounts[i]} }' file_name
2.6.4 R16-300 1 2.6.3 HR21-100 2 2.6.3 H23-600 1 2.5.3 D12-500 2