행이 이동한 diff 출력의 위치 수를 어떻게 표시합니까?

행이 이동한 diff 출력의 위치 수를 어떻게 표시합니까?

상위 1위

1,facebook.com
2,google.com
3,youtube.com
4,yahoo.com
5,wikipedia.org
6,baidu.com
7,live.com
8,amazon.com
9,qq.com
10,twitter.com

상위 2위

1,facebook.com
2,google.com
3,youtube.com
4,yahoo.com
5,baidu.com
6,wikipedia.org
7,live.com
8,qq.com
9,amazon.com
10,twitter.com

diff -u  /Users/stofke/Desktop/top2a.csv /Users/stofke/Desktop/top1a.csv |
  sed -n '1,2d;/^[-+]/p' |
  sort --field-separator=',' --key=2 

+9,amazon.com
-8,amazon.com
+5,baidu.com
-6,baidu.com
+8,qq.com
-9,qq.com
+6,wikipedia.org
-5,wikipedia.org

하지만 실제로는 이것이 필요합니다.

 +1, amazon.com
 -1  baidu.com
 -1  qq.com
 +1  wikipedia.org

마지막 단계에서 무엇을 해야할지 모르겠습니다.

(감소율이나 증가율도 계산해야 함)

다음에 추가| paste -d, - -

나에게 이것을 줘

+9,amazon.com,-8,amazon.com
+5,baidu.com,-6,baidu.com
+8,qq.com,-9,qq.com
+6,wikipedia.org,-5,wikipedia.org

답변1

awk를 사용하세요

awk -F, '
    NR == FNR {n[$2] = $1; next}
    {n[$2] -= $1}
    END {for (k in n) if (n[k] != 0) printf " %2d  %s\n",n[k],k}
' top1 top2

산출

 -1  amazon.com
  1  qq.com
 -1  wikipedia.org
  1  baidu.com

주문은 보장되지 않습니다.

답변2

join궁극적으로 출력을 정렬하기를 원하므로 메서드 사용을 고려할 수도 있습니다 . 좋다:

join -t, -j2 <(sort -t, -k2 file1) <(sort -t, -k2 file2) |
   awk -F, '{n=$3-$2; if (n) print n, $1}'

관련 정보