2012-07-11 52 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