我有一个关于我之前成功回答的问题here by @fedorgui的问题。使用awk计算统计信息
我有一个表:
pac1 xxx
pac1 yyy
pac1 zzz
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
,我需要计算这样的输出:
pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4
其中第一个数字是在列中唯一出现的二/唯一出现在一列(在此案例xxx发生2列2和uniq列1是4 => 2/4
在awk中的解决方案在这里:
$ awk 'FNR==NR {col1[$1]++; col2[$2]++; next} {print $0, col2[$2] "/" length(col1)}' file file
但我的输入可能复制像行:
pac1 xxx
pac1 xxx
pac1 xxx
pac1 yyy
pac1 zzz
pac2 xxx
pac2 xxx
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
pac4 zzz
,我需要做同样的计算,但仅用于uniq的行,此统计添加到像所有行(不计算重复行) :
pac1 xxx 2/4
pac1 xxx 2/4
pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 xxx 2/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4
pac4 zzz 3/4
这是更复杂我有成千上万的行。谢谢你的任何想法。
数字和计算就像例1中相同 - 我需要做的计算像:uniq
Geroge
尝试'FNR == NR {if(!seen [$ 0] ++){col1 [$ 1] ++; col2 [$ 2] ++;} next}'(但你需要从行尾删除多余的空格)... else尝试'if(!seen [$ 1 $ 2] ++)' – Sundeep
这是我尝试的,但问题是,这是文件的一部分 - 我有更多的列,这不是唯一的,所以我只需要检查这两列的uniq。 – Geroge