diff

比較單個文件或目錄內容的命令

diff 命令比較文本文件。它能比較單個文件或者目錄內容。

diff 命令只有當輸入為文本文件時才有效。

diff命令用於比較兩個文件的差異,它可以被製作成補丁文件,使用patch命令對相應的文件打補丁。

Linux


用途語法

比較文本文件。
語法
比較兩個文件的內容
diff [ -c | -C Lines | -D [ String ] | -e | -f | -n ] [ -b ] [ -i] [ -t ] File 1 File2
diff [ -h ] [ -b ] File 1 File2
排序字典的內容並比較不同的文件
diff [ -c | -C Lines | -e | -f | -n ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S File ] [ -t ] [ -w ] Directory1 Directory2
diff [ -h ] [ -b ] Directory1 Directory2

描述

diff 命令比較文本文件。它能比較單個文件或者目錄內容。
注:
diff 命令只有當輸入為文本文件時才有效。
如果指定了 Directory1 和 Directory2 參數,diff 命令比較兩個目錄下名字相同的文本文件。列出不同的二進位文件、公共子目錄和只在一個目錄出現的文件。
當 diff 命令運行於常規文件時,且當目錄比較期間比較不同的文本文件時,diff 命令顯示文件中哪些行必須更改以保持它們一致。如果 File1 和 File2 參數都不是目錄,其中之一可能給定負號“-”,以採用標準輸入。如果 File1 參數是目錄,則使用目錄中與 File2 參數指定的文件名一致的那個文件。

典型輸出

Lines Affected in File1 Action Lines Affected in File2
Number1 a Number2[,Number3]
Number1[,Number2] d Number3
Number1[,Number2] c Number3[,Number4]
這些行類似於 ed 子命令將 File1 文件轉換成 File2 文件。Action 字母之前的數字指 File1;後面的數字則指 File2。因此,通過將 a 替換成 d,從右往左讀,您就能知道如何將 File2 轉換成 File1。在 ed 命令下,相同的對(即 Number1 = Number2)會簡略為單個數字。
下列每一行,diff 命令顯示以 <:(小於符號,冒號)開始的第一個文件中的所有受影響行,然後顯示以 >(大於符號)開始的第二個文件中的所有受影響行。
退出值 0 表示沒有不同,1 表示找到不同處,2 表示出錯。
注:
如果指定了多於一個的 -c、-C、-D、-e、-f 或者 -n 標誌,命令行上的最後一個具有優先權。系統不發出錯誤消息。

標誌

-b 將每行末尾當作單個新行標記處理(忽略新行字元前的空格字元)的任意數量空格字元與其他空格字元串(除了新行標記)同樣地比較。
-C Lines 啟動 diff 命令,但只比較 Lines 變數指定的行數。-C 標誌稍微修改輸出。輸出以文件的相同部分和創建日期開始。每個更改以 12 個 *(星號)組成的行分隔。從 File1 中要刪的行以 -(減號)標記,File2 中要添加的行以 +(加號)標記。從一個文件更改到另一個文件的行在兩個文件中都以 !(驚嘆號)標記。在每一個文件的指定上下文行中的更改會被整組一起輸出。
-c 啟動 diff 命令,比較三行上下文。-c 標誌稍微修改輸出。輸出以涉及文件的標識和它們的創建日期開始。每個更改以 12 個 *(星號)組成的行分隔。File1 中要刪的行以 -(減號)標記,要被添加到 File2 的行以 + (加號)標記。
-D [ String ] 使得 diff 命令在標準輸出上建立一個 File1 和 File2 的合併版本。包含了 C 預處理器控制項以便沒有定義 String 的結果編譯等同於編譯 File1,同時定義 String 產生 File2。
-e 以適合 ed 編輯器的格式進行輸出,將 File1 轉換成 File2。當使用這個標誌時,以下 shell 程序可以幫助維護一個文件的多個版本。手頭僅需要由 diff 命令生成的一個祖先文件($1)和一系列版本的 ed 腳本($2、$3、...)。標準輸出上的最近版本如下:
(shift; cat $*; echo '1,$p') | ed - $1
當使用 -e 標誌比較目錄時,輸出上添加了額外的命令,因此,結果是一個 shell 腳本,將兩個目錄上的共有文本文件從 Directory1 上的狀態轉換到 Directory2 上的狀態。
注:
由 -e 或 -f 標誌產生的編輯腳本無法創建由單個組成的行。(周期)。
-f 以不適合 ed 編輯器的格式創建輸出,按照在 -e 標誌下產生的逆向順序顯示從 File1 到 File2 的轉換的必要修改。
-h 如果要更改的部分比較短而且分隔清晰,則執行備用的比較可能會更快。-h 標誌可用於任意長度的文件。-c、-C、-D、-e、-f 和 -n 標誌無法與 -h 標誌一起使用。當使用 -h 標誌時,除了 -b 標誌,其他標誌一律忽略。
-i 忽略字母大小寫。例如,小寫 a 被認為同大寫 A 一樣。
-l 長輸出格式。每個由文本文件比較 diff 命令獲得的結果通過命令 pr 輸送分頁。在報告所有文本文件不同之處后,其他不同之處將被記憶和總結。
-n 產生類似於 -e 標誌創建的輸出,但是順序相反,而且在每一插入或刪除命令上進行更改計數。這是修訂控制項系統(RCS)所用的格式。
-r 使 diff 命令的應用程序遞歸到遇到的公共子目錄。
-s 報告相同的文件,否則不提。
-S [ File ] 當比較目錄時,忽略在 File 變數指定的文件之前整理名稱的文件。-S 標誌只用於 Directory1 和 Directory2 參數指定的目錄。如果您將 -r 標誌與 -S 標誌一起使用, -S 標誌在 Directory1 和 Directory2 子目錄中不進行遞歸。
-t 在輸出行擴展製表符。典型輸出或者 -c 標誌輸出會添加字元到每一行首,這會影響初始行的縮進,使得輸出列表難以解釋。該標誌則保留原始源的縮進。
-w 忽略所有空格和製表符,將所有其他空白字元串視為一致。例如,if ( a == b ) 與 if(a==b) 相等。
退出狀態
此命令返回下列退出值:
0 未找到不同處。
1 找到不同處。
>1 發生錯誤。

示例

1. 要比較兩個文件,請輸入:
diff chap1.back chap1
只顯示文件 chap1.bak 和 chap1 的不同之處。
2. 要比較兩個文件,但是忽略空格字元個數的區別,請輸入:
diff -w prog.c.bak prog.c
如果兩行僅僅空格和製表符數目不同,則 diff -w 目錄認為它們相等。
3. 要創建一個包含 ed 命令可以用於從另一個文件重構文件的命令的文件,請輸入:
diff -e chap2 chap2.old >new.to.old.ed
這將創建一個名為 new.to.old.ed 的文件,它包含 ed 子命令,把 chap2 轉換回在 chap2.old 中找到的文本版本。在大多數情況下,new.to.old.ed 比 chap2.old 要小很多。您可以通過刪除 chap2.old 以節省磁碟空間,您也可以在任何時候重建它,通過輸入:
(cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
括弧中的命令把 1,$p 添加到編輯命令的末尾,發送給 ed 編輯器。1,$p 使得 ed 命令在編輯完成後將文件寫到標準輸出。這一修改的命令序列然後從管道傳給 ed 命令(| ed),編輯器讀取它作為標準輸入。- 標誌使 ed 命令不顯示文件大小以及其他附加信息因為它們易與 chap2.old 的文本混餚。
文件
/usr/bin/diff 包含 diff 命令。

使用


1) diff/patch這對工具在數學上來說,diff是對2個集合求差,patch是求和
diff A B > C 生成A和B的diff文件C
patch A C 給A打上diff文件得到B
patch -R B C B還原為A
2) 內核補丁
生成
diff -uNr linux-2.6.xxx linux-2.6.xxx.1 > diff.patch
升級
cp diff.patch linux-2.6.xxx/.
cd linux-2.6.xxx
patch -p1 < diff.patch

規格


DIFF線 收盤價短期、長期指數平滑移動平均線間的差
DEA線 DIFF線的M日指數平滑移動平均線
MACD線 DIFF線與DEA線的差,彩色柱狀線
參數:SHORT(短期)、LONG(長期)、M 天數,一般為12、26、9
用法:
1.DIFF向上突破DEA,買入信號。
2.DIFF向下跌破DEA,賣出信號。
3.DEA線與K線發生背離,行情反轉信號。
4.分析MACD柱狀線,由紅變綠(正變負),賣出信號;由綠變紅,買入信號
以上只是基本知識,具體內容很複雜,該指標要與K線系統,成交量系統配合看。它即使獨立看,也是很有講究的,金叉,死叉有零上與零下之分,前後有背離之分,紅柱樁與黃白線的關係,綠柱樁與黃白線的關係,黃白線在柱樁里運行和柱樁外運行,也是有學問的。山包與山包的關係,大山包與小山包的關係,月線,周線,日線,分時線的看盤方法也是不同的.
另外我要強調的是MACD在各種指標中,是最好的指標,非常複雜,非常豐富,但又非常管用。也就是說在錢龍一出現就排在第一的道理.
移動平均線PMA是量的一種表現形式。比如指數的三日移動平均線,首先取得連
續三日的三個指數,計算其平均值A,然後后移。去掉最先一個指數,增加新一日一個
指數,再計算三個指數的平均值B.如此移動計算,得到一條三日移動平均線。同理,可
得五日,六日,十日,十三日,三十日,七十日,二百日等移動平均線。移動平均線由樣本
數的多少決定了移動變化的急緩。樣本數少,變化較急,稱為快速線,因此多作為短線
指標。樣本數多,變化較緩,稱為慢速線,在樣本數適當多的時候,多作為中線或長線
指標,重要的是,因為移動平均線是由一定樣本的集合的連續移動計算產生,所以
它的移動方向和速度代表了該集合的整體態勢。這一點,正是人們所要利用的。
1、移動平均線向上或向下,都表示了趨勢的方向,所以一般而言,PMA由下轉
上為買入信號,PMA由上轉下為賣出信號。但PMA日數N的選擇往往決定
了你的買賣是否成功及成效的大小。這是因為,對單條PMA而言,快速線
反映敏感卻顯浮躁,慢速線反映沉實卻顯獃滯。
然而N的選擇終歸是沒有定論的,不過卻有一條原則,即:選擇N使得PMA逼
近所分析品種的短期,中期和長期的循環周期。這是要具體分析才能確定的。
如果從某一數學模型來考慮,則是應用費波南茨級數3,5,8,13,
21,34, 55,來確定PMA的N值。
2、當PMA在指數上方時,PMA是指數的壓力線;當PMA 在指數的下方時,
PMA是指數的支持線。一般而言,指數向下跌破PMA為賣出信號,指數向
上升穿PMA為買入信號。
3、美國的專家葛藍碧為此提出八大買賣法則(PMA=200日PMA,)如下:
(1) 買入信號1:PMA下降后出現平盤或回升移動,當價格突破PMA壓力上
升為重要的買入信號。
(2) 買入信號2:PMA仍然上升,但價格卻跌穿PMA的支持線,當價格又向
上時為買入信號。
(3) 買入信號3:價格下跌,但獲PMA良好支持后回升時為買入信號。
(4) 買入信號4:價格在高位跌破了PMA支持線,引發了急速下跌,短期內
價格仍有向PMA回歸的要求,當價格開始向 PMA 回歸反彈時為買入信
號。
(5) 賣出信號1:市勢逆轉,價格跌破PMA支持線時為重要的賣出信號。
(6) 賣出信號2:PMA已處在下降過程中,價格向PMA的回歸反彈上穿PMA
壓力線,當價格復向下時為賣出信號。
(7) 賣出信號3:價格再次向PMA回歸反彈,但被PMA有效壓制後下跌為賣
出信號。
(8) 賣出信號4:價格在低位升穿了PMA壓力線,引發了急速上升,短期內
價格仍有向PMA回歸的要求,當價格開始向PMA回歸整理時為賣出信號。

MATLAB


函數簡介

在matlab中,diff函數用於求導數或者向量和矩陣的比較(詳細說明參見:調用格式及說明)。在matlab的命令窗口中輸入doc diff或者help diff即可獲得該函數的幫助信息。
調用格式及說明
Y = diff(X)
這裡求函數X的一階導數
Y = diff(X,n)
求函數X的n階導數
Y = diff(X,dim)
求函數X關於變數dim的偏導數
Y = diff(X,n,dim)
求函數X關於dim的n階偏導數
若X為向量,
Y = diff(X)= [X(2)-X(1),X(3)-X(2),...,X(n)-X(n-1)]
求前後兩項之差
若X為矩陣,
Y = diff(X)= [X(2:n,:) - X(1:n-1,:)]
求每列前後兩項之差
相關函數
gradient, prod, sum

程序示例

>> syms x y z;
>> y=x^2+z^2;
>> diff(y)
ans =2*x
>> diff(y,z)
ans =2*z
在這個示例中,定義了三個符號變數x y z,然後令y等於x和z的平方和,然後diff(y)求關於x的偏導數,而diff(y,z) 則是對y求關於z的偏導數。
>> x=[2 3 5 7 12 23]
>> d=diff(x)
d =
1 2 2 5 11
當然X可以是一個矩陣。更多示例請參閱matlab的幫助文檔。
1)diff基本用法:
#diff foo.txt foo1.txt
9c9
< everything
---
> everybody
a表示第一個文件進行了新增
d表示第一個文件進行了刪除
c表示第一個文件進行了修改
<表示第一個文件的差異
>表示第二個文件的差異
2)diff生成補丁文件
假設當前路徑為demo
#mkdir old/a/b/foo.txt
#vi old/a/b/foo.txt
輸入以下信息:
old_line_1
old_line_2
我們準備要對old目錄下的foo.txt進行修改,先複製一份,修改後再製作補丁。
#cp -R old new
vi new/a/b/foo.txt
將原信息修改為:
new_line_1
new_line_2
diff -urN old new > foo.patch
參數詳解
-u 採用統一格式輸出
-r 對目錄進行比較
-N 新文件作為空文件進行比較,即新文件會打入補丁包中
3)patch進行補丁
patch -p0 < foo.patch
參數詳解
-p 表示跳過幾級目錄,0表示無需跳過
這樣就可以對old/a/b/foo.txt打補丁。