【问题标题】:Find multible missing lines in csv using diff使用 diff 在 csv 中查找多个缺失的行
【发布时间】:2012-07-11 17:53:34
【问题描述】:

这个答案解决了我的部分问题: 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 通话中我需要改变什么?

【问题讨论】:

  • 您能附上任何差异输出示例和预期的最终结果吗?
  • 当然...示例差异结果:6715c6643 &lt; Frau;;;Blub1;;Blob;19860314;Blub1.Blob@uni.de; --- &gt; Frau;;;Blub2;;Blob;19860314;Blub2.Blob@uni.de; 6745d6672 &lt; Frau;;;Blub3;;Blooob;19911002;Blub3.Blooob@uni.de; 6842d6844,6772 &lt; Herr;Dipl.Ing;;Ping;;Pong;19860225;Ping.Pong@uni.de; &lt; Herr;Dipl.Ing;;Ping2;;Pong;19931002;Ping2.Pong@uni.de; &lt; Herr;Dipl.Ing;;Ping3;;Pong;19871212;Ping3.Pong@uni.de; 6851c6781 &lt; Herr;Dr.rer.nat.;;Ying;;Yang;19460610;YING.YANG@uni.de; --- &gt; Herr;Dr.rer.nat.;;Ying;;Yang;19460610;ying.yang@uni.de;
  • 我实际得到的:Frau;;;Blub3;;Blooob;19911002;Blub3.Blooob@uni.de; Herr;Dipl.Ing;;Ping;;Pong;19860225;Ping.Pong@uni.de;
  • 我想得到什么:Frau;;;Blub3;;Blooob;19911002;Blub3.Blooob@uni.de; Herr;Dipl.Ing;;Ping;;Pong;19860225;Ping.Pong@uni.de; Herr;Dipl.Ing;;Ping2;;Pong;19931002;Ping2.Pong@uni.de; Herr;Dipl.Ing;;Ping3;;Pong;19871212;Ping3.Pong@uni.de;

标签: shell unix csv grep diff


【解决方案1】:
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/^< //

将替换行首的所有&lt;

p 将打印该行。

【讨论】:

  • 谢谢...这是我正在寻找的解决方案!
猜你喜欢
  • 2012-07-06
  • 2016-11-30
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多