2016-12-01 64 views
0

我有以下文件:發生兩列的行UNIX命令行

epd cvrA 
epd cvrA 
cvrA epd 
emrY hofB 
mdtI ydeP 
ygcH yagR 
nrdD abrB 
lsrK yqgD 
yhdA yiaF 
fadJ plsB 
fadJ thiG 
plsB thiG 
ybhS glnE 
yfeX idnR 

我要確定兩列的值的組合的出現。因此,擁有A和B以及B和A應該是相同的。我嘗試了一下uniq -c,但那並沒有解決它。所以最後我希望有一個文件,每個可能的組合 - 再次A和B和B和A應該總結在一起。這可能與awk?

至於那將意味着輸出:

epd cvrA 3 
emrY hofB 1 
mdtI ydeP 1 
ygcH yagR 1 
nrdD abrB 1 
lsrK yqgD 1 
yhdA yiaF 1 
fadJ plsB 1 
fadJ thiG 1 
plsB thiG 1 
ybhS glnE 1 
yfeX idnR 1 
+2

帖子預期輸出 – 123

+0

像這樣的事情? 'awk'c [$ 1 <$ 2?$ 1「」$ 2:$ 2「」$ 1] ++; END {for(i in c)print i,c [i]}'文件' – user000001

+0

感謝您的回答。我更新了預期產出的問題。是的,第三列的數字會很好,之後我可以排序。 – riasc

回答

4
$ awk '{cnt[($1>$2 ? $1 FS $2 : $2 FS $1)]++} 
     END{for (idx in cnt) print idx, cnt[idx]}' file 
ygcH yagR 1 
thiG plsB 1 
hofB emrY 1 
plsB fadJ 1 
yqgD lsrK 1 
ydeP mdtI 1 
yfeX idnR 1 
ybhS glnE 1 
thiG fadJ 1 
nrdD abrB 1 
epd cvrA 3 
yiaF yhdA 1 

,如果你想輸出由數量排序,GNU AWK爲sorted_in:

$ awk '{cnt[($1>$2 ? $1 FS $2 : $2 FS $1)]++} 
     END{PROCINFO["sorted_in"]="@val_num_desc"; for (idx in cnt) print idx, cnt[idx]}' file 
epd cvrA 3 
thiG plsB 1 
hofB emrY 1 
plsB fadJ 1 
yqgD lsrK 1 
ydeP mdtI 1 
yfeX idnR 1 
ybhS glnE 1 
thiG fadJ 1 
nrdD abrB 1 
ygcH yagR 1 
yiaF yhdA 1 
+0

太棒了。謝謝。 – riasc

3

喜歡這個?請發佈預期的輸出和工作數據集。

$ cat > bar 
a b 
b a 
$ awk '{if($1<$2) a[$1 " " $2]++; else a[$2 " " $1]++} END {for(i in a) print i, a[i]}' bar 
a b 2 
+0

不錯。感謝你的回答。 – riasc

1

不使用AWK(只爲了好玩)溶液,

while IFS= read -r aline; do 
    echo "$aline" | tr " " "\n" | sort -r | tr "\n" " " ; echo ""; 
done < input | uniq -c 

你收到,

3 epd cvrA 
1 hofB emrY 
1 ydeP mdtI 
1 ygcH yagR 
1 nrdD abrB 
1 yqgD lsrK 
1 yiaF yhdA 
1 plsB fadJ 
1 thiG fadJ 
1 thiG plsB 
1 ybhS glnE 
1 yfeX idnR 
+0

謝謝。請記住它。 – riasc

1

這個答案維持現場次序,並且還行順序:

awk ' 
    $1 FS $2 in count {count[$1 FS $2]++; next} 
    $2 FS $1 in count {count[$2 FS $1]++; next} 
    { 
    count[$1 FS $2] = 1 
    line[NR] = $1 FS $2 
    } 
    END { 
    for (i=1; i<=NR; i++) 
     if (i in line) 
     print line[i], count[l[i]] 
    } 
' file 

輸出

epd cvrA 3 
emrY hofB 1 
mdtI ydeP 1 
ygcH yagR 1 
nrdD abrB 1 
lsrK yqgD 1 
yhdA yiaF 1 
fadJ plsB 1 
fadJ thiG 1 
plsB thiG 1 
ybhS glnE 1 
yfeX idnR 1 
+0

不錯。感謝你的回答。 – riasc