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

需求:

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

使用awk命令对两个文件进行快速去重_第1张图片
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命令对两个文件进行快速去重)