• [转]linux 下 join命令总结


    转自:http://blog.chinaunix.net/uid-20754793-id-177777.html

    有两个文件需要合并,开始写了脚本实现,忽然发现join命令能够完全替代,总结了一下join的基本用法
    linux常用命令系列—join 文档内容合并

    指令名称:join
    功能介绍:找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。join强大呀,像sql里 面的join 呢.join工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系, join将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。
    语法格式:
    join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或 2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]
    常用参数说明:
      -a<1或2>   除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
      -e<字符串>   若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
      -i或--igore-case   比较栏位内容时,忽略大小写的差异。
      -o<格式>   按照指定的格式来显示结果。
      -t<字符>   使用栏位的分隔字符。
      -v<1或2>   跟-a相同,但是只显示文件中没有相同栏位的行。
      -1<栏位>   连接[文件1]指定的栏位。
      -2<栏位>   连接[文件2]指定的栏位。
      --help   显示帮助。
      --version   显示版本信息。 
    举例:创建文件发file1和file2内容如下:
    file1:

    1 aaaaaaaa
    2 bbbbbbbb
    3 cccccccccc

      file2:

    1 1111111111
    2 2222222222


    1.将两个文件 内容相同的行连接起来

    $join file1 file2
    1 aaaaaaaa 1111111111
    2 bbbbbbbb 2222222222



    $join file2 file1
    1 1111111111 aaaaaaaa
    2 2222222222 bbbbbbbb

    2显示第一个文件第二个域,第二个文件第二个域

    $join -o 1.2 2.2 file1 file2
    aaaaaaaa 1111111111
    bbbbbbbb 2222222222


    3 显示第一个文件不匹配的行

    其他选项用到时再写出

    $join -a1 file1 file2
    1 aaaaaaaa 1111111111
    2 bbbbbbbb 2222222222
    3 cccccccccc

    向file2添加新内容如下

    1 1111111111
    2 2222222222
    4 4444444444

    显示第二个文件不匹配的行


    1 aaaaaaaa 1111111111
    2 bbbbbbbb 2222222222
    4 4444444444


    合并两个文件脚本如下:

    #!/bin/bash

    #

    # Script: merge_print.sh

    # Author: CaoJiangfeng

    # Date: 2010-09-25 11:38:57 AM

    # Purpose: This script is used to merge two files in common

    # Version: 1.0

    #

    ################################################################

    ################ Define some variables here ##################

    ################################################################

    # Define some global variables

    FILE1="file1"
    FILE2="file2"
    TARGET=tmp
    ################################################################

    ################ Define some functions here ##################

    ################################################################

    function merge
    {
    cat /dev/null >$TARGET #Intialize a null file

    while read line1
    do    
        l1=`echo "$line1" |awk '{print $1}'`
        while read line2
        do
            l2=`echo "$line2" | awk '{print $1}'`
            if [ $l1 -eq $l2 ];
            then 
                echo -n $line1>>$TARGET
                echo "$line2" | awk '{print " "$2}'>>$TARGET
            fi
        done<$FILE2
    done <$FILE1
    }
    ################################################################

    ################ Start of main ##################

    ################################################################

    merge
    more $TARGET | sort -r # Print the result


    # clean 

    rm -f $TARGET
    exit 0

  • 相关阅读:
    1.时间复杂度与空间复杂度分析
    数据结构与算法之重头再来
    MySQL时间字段与业务代码取出的时间不一致问题
    [redtiger]在线靶场level3
    win10 卡顿 MsMpEng.exe进程
    react 笔记 局部打印 print
    react table td 自动换行
    kali apt-get update release文件过期
    ubuntu怎么切换到root用户,切换到root账号方法
    winscp连接kali 使用预置密码验证 拒绝访问
  • 原文地址:https://www.cnblogs.com/Andy-Lv/p/5311895.html
Copyright © 2020-2023  润新知