【问题标题】:Using sed to delete lines present in similar file使用 sed 删除类似文件中存在的行
【发布时间】:2012-06-10 08:02:18
【问题描述】:

我有一个来自原始驱动器和复制驱动器的文件列表,分别由 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

请帮忙。

【问题讨论】:

    标签: string bash replace sed


    【解决方案1】:

    这可能对你有用:

    sort orginal_list.txt duplicate_list.txt | uniq -u
    

    【讨论】:

    • 完美。它的运行速度也非常快。非常感谢。
    【解决方案2】:

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

    如果不是,您可以先对两个文件进行排序,以确定它们的不同之处。您可以使用一些paste 技巧来并排差异,甚至可以使用diff 并排输出。当文件被排序时,我认为diff 很容易发现添加了哪些行。

    【讨论】:

    • 看到文件没有被复制,有可能它们被标记为病毒,所以复制它们不是一个选项,我需要一个列表。我正在运行 kdiff 进行并排比较,但是对于文件的数量,一旦丢失 30 个文件,这两个文件根本不对齐是不切实际的。脚本解决方案将确保没有手动错误,并为我提供两个输出的不同文件的漂亮列表。
    • 病毒!?!?啊,很久以前当我使用windows的时候......再也不会了:)无论如何,你可以增加搜索diff程序的窗口,让它更加努力。此外,脚本解决方案将花费您很长时间,至少与 sed 和朋友一起使用。也许使用 perl 你会得到更好的结果。
    猜你喜欢
    • 2021-09-19
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2018-08-26
    • 2011-12-15
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多