計算文件中的交換列數

計算文件中的交換列數

我的文件中有這樣的成對字串

A B
A C
B A
B C
C A

我正在尋找一種方法來計算我有多少個交換對。即,A BB A形成這樣的一對,但是B C沒有(因為我們錯過了C B)。

我嘗試過使用 awk 但我現在只是猜測。

提前致謝。

答案1

我設法解決了它

awk '{if ($2<$1) print $2" "$1; else print $1" "$2}' |sort filenames.* | uniq -d |wc -l

程式碼的第一部分將對檔案進行排序,然後刪除重複項。

答案2

嘗試使用下面的腳本並完美運行

for i in "A B" "B C" "C A"; do j=`echo $i | rev`;  p=`awk -v i="$i" -v j="$j" '$0 ~ i||$0 ~ j{if(!seen[$0]++)print }' filename|wc -l` ; if [[ $p == "2" ]] ;then echo "match found for $i"; awk -v i="$i" -v j="$j" '$0 ~ i||$0 ~ j{if(!seen[$0]++)print }' l1; else echo "match didnt found for $i";fi;echo "==============================================================";done

輸出

match found for A B
A B
B A
==============================================================
match didnt found for B C
==============================================================
match found for C A
A C
C A
==============

答案3

$ awk '{seen[$1,$2]++} seen[$2,$1]{cnt++} END{print cnt+0}' file
2

答案4

另一種awk計算交換配對之間不平衡的方法

awk '{if (com[$2"/"$1]>0){com[$2"/"$1]--}else{com[$1"/"$2]++}}
 END{print "Unbalanced commutations";for (c in com) if (com[c]>0){print c, com[c]; un=un+com[c]} print "and "(NR-un)/2" commutated pairs"}' file1

輸出

Unbalanced commutations
B/C 1
and 2 commutated pairs

相關內容