【问题标题】:Comparing two files for duplicate strings using mac bash使用mac bash比较两个文件中的重复字符串
【发布时间】:2014-08-28 12:20:33
【问题描述】:

我正在尝试通过两个 .txt 文件来查找匹配项,并且只打印唯一的行。我有一个数字和名称列表以及第二个仅包含部分数字的列表。

文件格式是这样的
5553239090,蝙蝠侠

第二个文件只有六个数字
555323

我想确保只取出与前六个数字匹配的行,因此如果我有 239090,我不希望它取出该行。到目前为止,我发现有效的是这个

while read line

do
echo $line
    while read line2

        do

            if [[ "${line:0:6}" != "$line2" ]]; then

                echo $line >> uniqueList2.txt
                echo ${line:0:6}
            fi

        done < file2.txt

done < file1.txt  

由于某种原因,它并没有取出所有匹配项,只是其中一些匹配项。似乎它与 file2 顶部的数字最匹配,并且列表越靠下,就越有可能错过它。

有什么我错过的或更好的方法吗?

【问题讨论】:

    标签: macos bash loops while-loop


    【解决方案1】:

    你可以像这样使用awk

    awk 'FNR==NR {a[$1];next} {for (i in a) if (index($0, i)==1) print}' file2 file1
    

    或者你可以使用这个grep

    grep -f <(sed 's/^/\^/' file1) file2
    

    【讨论】:

    • 我试过了,但问题是我从号码中的任何地方都得到了匹配,而不仅仅是前 6 个
    • 它正在找到一些匹配项,但不是全部。我有一个包含 50 个名称的数字列表,在这 50 个数字中,我应该匹配其中的 25 个。使用我的原始代码,我根据列表的顺序提取了 3-5 个,而使用 AWK,我提取了 8 个匹配项。我不确定为什么它不起作用。
    • 如果输入数据不匹配,如果您提供更多示例,我可以查看它。
    • 刚开始使用所以我如何在这里链接文件?
    • 会不会不是所有的回车都是你想的那样?这些文件的来源是什么?如果代码说不匹配,可能不匹配...
    猜你喜欢
    • 2015-12-07
    • 2012-06-19
    • 2012-09-26
    • 1970-01-01
    • 2014-11-12
    • 2013-06-24
    • 2012-11-23
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多