2012-07-11 67 views
0

我的問題的一部分解決了這個答案: Threadlink ,但我的問題的一個重要部分沒有解決!在csv中使用差異查找多行缺失行

使用

diff a.csv b.csv | grep -E -A1 '^[0-9]+d[0-9]+$' | grep -v '^--$' | sed -n '0~2 p' | sed -re 's,^< (.*)$,\1,g' 

幾次後,我發現的東西離開了。 有時多行下面的行被刪除。 如果只有一行被刪除有這樣的發現:

3663d3661

對於multible線是:

3724,3725d3718

所以我改變了diff呼籲:

diff a.csv b.csv | grep -E -A1 '^[0-9]+\,*[0-9]*d[0-9]+$' | grep -v '^--$' | sed -n '0~2 p' | sed -re 's,^< (.*)$,\1,g' 

這適用於多個刪除行中的第一行。

我的問題是: 在這種情況下,我怎麼能得到所有的刪除行(可能是5行)? 我在diff電話中必須更改什麼?

+0

你可以附加任何差異輸出示例和預期的最終結果嗎? – rush 2012-07-11 07:14:35

+0

當然...例差異結果: '6715c6643 Frau ;;; Blub2 ;; Blob; 19860314; [email protected]; 6745d6672 Herr; Dr.rer.nat .;; Ying ;; Yang; 19460610; [email protected];' – MaiLo 2012-07-11 08:28:11

+0

我實際得到的是:'Frau ;;; Blub3 ;; Blooob; 19911002; [email protected]; Herr; Dipl.Ing ;; Ping ;; Pong; 19860225; [email protected];' – MaiLo 2012-07-11 08:32:19

回答

0
diff a.csv b.csv | sed -n '/^[0-9]\+d[0-9]*/,/^[0-9]\+[^d]*$/{/^[0-9]\+/d;s/^< //;p}' 

會這樣做。

/^[0-9]\+d[0-9]*/,/^[0-9]\+[^d]*$/ 

會發現這些被刪除

/^[0-9]\+/d 

將刪除所有6842d6844,6772

s/^< // 

將取代所有<在行

p將打印開頭的字符串範圍該線。

+0

謝謝......這是我尋找的解決方案! – MaiLo 2012-07-11 10:06:37