Bash

如何顯示在差異輸出中移動的位置行數?

  • January 20, 2013

頂部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

您還可以考慮使用一種方法,join因為您最終想要對輸出進行排序。像:

join -t, -j2 <(sort -t, -k2 file1) <(sort -t, -k2 file2) |
  awk -F, '{n=$3-$2; if (n) print n, $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

訂單不保證。

引用自:https://unix.stackexchange.com/questions/61924