我有一個關於我之前成功回答的問題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