• Linux文本比较-diff&awk


    最近为了完成工作,需要将两个文件A.old和A进行比较,然后将A中新增加的部分保存到A中,其他部分删除。经过查找相关资料,发现有两种比较好的方法。

    1. 使用diff命令

    diff old.file new.file | grep "^> " | sed 's/> //g' > temp.file #只存在于后面new.file文件中的内容保存到temp.file中
    mv temp.file new.file # 将temp.file中的内容覆盖new.file
    sed 's/^> //g' # s表示进行替换,意思是将以"> "开头的符号全部替换为""
    sed 's/要被替换的字符串/新的字符串/g' 

    2. 使用awk命令

    awk 'NR==FNR{a[$0]}NR>FNR{if(!($1 in a)) print $0}' old.file new.file > temp.file
    mv temp.file new.file
    awk内置变量
    变量名称 代表意义
    ARGC 命令行变元个数
    ARGV 命令行变元数组
    FILENAME 当前输入文件名
    FNR  当前文件中的记录号
    FS  输入域分隔符,默认为一个空格
    RS 输入记录分隔符
    NF 当前记录里域个数
    NR 到目前为止记录数
    OFS 输出域分隔符
    ORS 输出记录分隔符
    $0 代表一整行的数据
    awk内置的字符串函数
    gsub(r,s)
    在整个$0中用s代替r
    gsub(r,s,t)
    在整个t中用s替代r
    index(s,t)
    返回s中字符串t的第一位置
    length(s)
    返回s长度
    match(s,r)
    测试s是否包含匹配r的字符串
    split(s,a,fs)
    在fs上将s分成序列a
    sprint(fmt,exp)
    返回经fmt格式化后的exp
    sub(r,s)
    用$0中最左边最长的子串代替s
    substr(s,p)
    返回字符串s中从p开始的后缀部分
    substr(s,p,n)
    返回字符串s中从p开始长度为n的后缀部分

    NR和FNR的区别
    NR:当前记录数

    FNR:当前文件的记录数,其作用域在一个文件内,重新打开文件,FNR重新从1开始。

    两者的区别主要体现在awk操作文件数大于1时。

    参考:http://bbs.chinaunix.net/thread-1155924-1-1.html

            http://bbs.chinaunix.net/thread-2309494-1-1.html

  • 相关阅读:
    最长上升子序列(实验回顾)
    数据库应用开发一、vs
    全文检索
    mangtomant 增删改查
    django
    SQLAlchemy 增删改查 一对多 多对多
    Flask-Sqlalchemy—常用字段类型说明
    flask
    文件下载
    python连接mongodb
  • 原文地址:https://www.cnblogs.com/fengxm/p/4074126.html
Copyright © 2020-2023  润新知