使用sed删除类似文件中的行

时间:2012-06-06 09:56:12

标签: string bash replace sed

我有一份来自原始和重复驱动器的文件列表,包括985257行和984997行。

由于行数不匹配,我确定某些文件没有重复。

为了确定哪些文件不存在,我希望使用sed过滤原始文件列表,方法是删除源列表中重复列表中的任何行。

我曾考虑在excel中使用匹配公式,但由于程序崩溃的行数。我认为在sed中使用这种方法将是一个可行的选择。

到目前为止,我的方法并没有成功。

 echo "Start"
 # Cat the passed argument which is the duplicate file listing
 for line in $(cat $1)
 do 
   #sed the $line variable over the larger file and remove
   #sed  "${line}/d"  LiveList.csv
   #sed -i "${line}/d"  LiveList.csv
   #sed -i '${line}' 'd'  LiveList.csv
   sed -i "s/'${line}'//" /home/listings/LiveList.csv
 done

有一个临时文件被创建并填充到列表文件的103.4mb,但列表文件本身根本没有改变。

我的另一个问题是,由于列表是在windows中创建的,'\'字符可能会转义字符串,导致没有匹配,因此没有更改。

Example path:
Path,Length,Extension
Jimmy\tail\images\Jimmy\0001\0014\Text\A0\20\A056TH01-01.html,71982,.html

请帮忙。

2 个答案:

答案 0 :(得分:3)

这可能对您有用:

sort orginal_list.txt duplicate_list.txt | uniq -u

答案 1 :(得分:0)

我想到的第一件事就是使用rsync来尽可能快地复制丢失的文件。它真的有奇效。

如果没有,您可以先对两个文件进行排序,以确定它们的不同之处。您可以使用一些paste技巧来放置并排差异,甚至可以使用diff并排输出。在订购文件时,我认为diff可以轻松识别已添加的行。