美文网首页
使用awk命令对两个文件进行快速去重

使用awk命令对两个文件进行快速去重

作者: Swifer | 来源:发表于2018-12-27 17:38 被阅读139次
    需求:

    有两个文件,文件 A 是英文,文件 B 是中文;B 是 A 的翻译。
    但是 A 中有很多是重复的。所以要将 A 中重复的行删除,并删除 B 中对应的行。同时保留第一个。
    比如

    image.png
    将 A 里面除了第一句找不到翻译结果以外重复的删除,并删除 B 中对应的位置3 5 7 9
    尝试过简单粗暴的去重,但是效果并不理想。
    awk '!seen[$0]++' merge_all.txt > output.txt
    于是自己学了一下 awk 的语法,然后写了个脚本:
    # awk -f del.awk file1 file2 > result.txt
    # wc -l result.txt
    # n = result的行数除以2
    # split -l 行数 result.txt 
    ## 使用 cat 可以合并文件、使用 rename 可以批量重命名
    {
        if (NR==FNR) {
            if(!a[$0]) {
                a[$0]++
                print
            } else {
                b[FNR]=1
            }
        } else {
            if (!b[FNR]) {
                print
            }
        }
    }
    

    跑完这个命令之后,会把 file1、file2 合并到 result.txt 里面,所以需要用 split 手动按行数从中间切割。


    这个方法的优点是非常非常非常快。比写 python 快了好多好多倍。
    多学点 linux 命令,在做数据处理的时候,还是挺好用的。

    相关文章

      网友评论

          本文标题:使用awk命令对两个文件进行快速去重

          本文链接:https://www.haomeiwen.com/subject/ltrdlqtx.html