xiaoyue8106 发表于 2005-5-10 10:33:08

求文本比较 方案脚本

我在 test目录下有n个文本文件 :sms-1-20050301000000.txt,sms-2-20050302000000.txt 等,还有一个文件为test.txt

其中每个文本文件的每一行都是一条记录,而test.txt中的记录为
12341324123
13243532131
54325341321
12332141325
我现在想从 sms-1-2005......这些文本文件中删除包含test.txt中相对应行记录的行,请问这个shell 脚本怎么写,

---------------------------------------------
跪,急 求

MichaelBibby 发表于 2005-5-10 10:51:19

用一个for循环和grep 的-v -l选项应该可以搞定吧
我得做个测试先

xiaoyue8106 发表于 2005-5-10 10:55:54

谢谢大哥,
如果人工手动搞,会死人啊
-----------------------------------
我是菜鸟,但我想飞向蓝天

MichaelBibby 发表于 2005-5-10 11:25:33

做了一个测试,成功了。
在你自己做测试之前请做一下备份,以免毁了数据。

#!/usr/local/bin/bash
# file : createfile.sh

for ((i=1;i<=4;i++))
do
        touch sms-$i.txt
done


#!/usr/local/bin/bash
# file : match.sh

for line in $(cat test.txt)
do
        for filename in $(ls sms*.txt)
        do
                grep -il $line $filename>/dev/null
                case $? in
                        0) grep -v $line $filename>tempfile&&rm $filename&&mv tempfile $filename ;;
                        1) echo 'no match' ;;
                esac
        done
done

第一个脚本createfile.sh是我用来生成你的那些sms-**.txt文件的, 你不需要。
第二个才是你需要的。

MichaelBibby 发表于 2005-5-10 11:27:24

请把原来的数据做一下备份,然后再测试
破坏了数据俺可不负责的哟 :mrgreen:

xiaoyue8106 发表于 2005-5-10 12:13:45

感谢
--------------------------------
菜鸟起飞

MichaelBibby 发表于 2005-5-10 12:25:41

能用不?
告诉我你的测试结果呀 :x

xiaoyue8106 发表于 2005-5-10 12:27:12

我还在测试,你等等,大哥

xiaoyue8106 发表于 2005-5-10 13:01:25

MichaelBibby大哥还在不,我现在发现一个问题,就是如果有个sms文件中的记录和test中的记录都模糊匹配,那么你的程序就没有生成一个tempfile文件,同时也没有把相应的SMS文件删除,
请教大哥该怎么修改文件,
---------------------------
继续测试中

MichaelBibby 发表于 2005-5-10 13:31:09

如果有个sms文件中的记录和test中的记录都模糊匹配,那么你的程序就没有生成一个tempfile文件,同时也没有把相应的SMS文件删除模糊匹配?
把你的要求说得更具体些呢?

xiaoyue8106 发表于 2005-5-10 14:02:45

sms文件中的记录只需包含test文件的记录就算满足,用grep就可以实现
大哥,我在你的目录下建一个目录new,刚才的问题(如果sms文件中的记录和test中记录全匹配,脚本就对该文件不作处理)就解决了,
我把你代码中的这句
grep -v $line $filename>tempfile&&rm $filename&&mv tempfile $filename ;;
改为
grep -v $line $filename>tempfile&&rm $filename&&mv tempfile ./new/filename ;;
不处理的文件留在原来位置,处理的文件移动到new目录下,不过现在又发现这么移动后,处理的结果有问题,脚本没有完全把所有相同记录删除,
-----------------------------------
实在想不出是什么问题,是不是我电脑有问题啊

xiaoyue8106 发表于 2005-5-10 14:22:10

调试基本上结束,发现问题就是
当sms文件和test文件全部匹配和全部不匹配的都没有进行处理,我把
            grep -il $line $filename>/dev/null
            改为grep -i $line $filename>/dev/null(去掉l),还是没有处理全部不匹配      的   记录
页: [1]
查看完整版本: 求文本比较 方案脚本