美文网首页
使用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命令对两个文件进行快速去重

    需求: 有两个文件,文件 A 是英文,文件 B 是中文;B 是 A 的翻译。但是 A 中有很多是重复的。所以要将 ...

  • 常用命令(持续更新)

    处理文本常用单行命令,持续更新~1.awk 匹配两个文件内容### Linux Shell中使用awk完成两个文件...

  • awk命令的使用

    awk命令的使用 awk命令格式awk '条件1{动作1} 条件2{动作2}…' 文件名 在介绍awk命令的用法前...

  • Bash Shell 并发任务

    在平常 SA 工作中,我们通常需要使用 grep、awk、jq 等命令对日志文件进行过滤。处理多个文件时,使用 f...

  • awk使用指南与实战分析

    1、 什么时候适合使用awk命令 (1) 逐行处理文件,希望对文件中每行文件的数据进行剔除,修改,会增加(2) 除...

  • Shell编程-获取ping的平均值

    思路说明: 使用ping命令 通过grep命令获取rtt行 然后通过awk命令,使用“/”,进行分组,并获取全部分...

  • awk 命令使用方法

    1. awk 擅长功能 awk 擅长对列进行操作/进行数据信息的统计(数组) awk 基本使用(高级使用-shel...

  • awk & sed

    awk 常见使用教程 awk 使用的时候有两个要求就是脚本必须放到{}中,由于awk命令假定脚本是单个文本字符串,...

  • linux 命令awk & print

    awk处理过程: 依次对每一行进行处理,然后输出awk命令形式:awk [-F|-f|-v] ‘BEGIN{} /...

  • Awk 命令详解

    [TOC] 简介 我们常在命令行中使用awk命令提取转换文件文本内容,可以说,awk是命令行中文本处理的瑞士军刀,...

网友评论

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

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