파일에서 교체된 열 수 계산

파일에서 교체된 열 수 계산

내 파일에 다음과 같은 문자열이 쌍을 이루었습니다.

A B
A C
B A
B C
C A

나는 얼마나 많은 스왑 쌍을 가지고 있는지 계산하는 방법을 찾고 있습니다. 즉 , 그러한 쌍을 형성하지만 A B그렇게 하지 마십시오(우리가 그것을 놓쳤기 때문입니다 ).B AB CC 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

관련 정보