我的文件中有这样的成对字符串
A B
A C
B A
B C
C A
我正在寻找一种方法来计算我有多少个交换对。即A B
和B 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