使用diff在csv中找到多个缺失的行

时间:2012-07-11 07:05:03

标签: shell unix csv grep diff

我的问题的一部分用这个答案解决了: Threadlink ,但我问题的一个重要部分尚未解决!

使用后

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

对于多线,它是:

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电话中更改什么?

1 个答案:

答案 0 :(得分: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将打印该行。