转自: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

[转]linux 下 join命令总结的更多相关文章

  1. Linux下Join命令

    Linux下Join命令 最近新上线算法,打算分析起点书籍点击率的波动,原来已经有流程每天每本书籍的点击率数据(文件).之前这种情况都是写代码对不同天的进行合并,后来发现linux下直接就有join命 ...

  2. Linux 下 make 命令 及 make 笔记

    Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make ...

  3. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  4. 例解 Linux 下 Make 命令

    Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make ...

  5. Linux下who命令之C语言实现

    Linux下who命令之C语言实现 Step1:前期准备 首先要有一个清楚的认识:linux中一切皆文件 实现who命令,who命令也是Linux中的一个文件,那我们怎么找到它呢?我们可以" ...

  6. linux下history命令显示历史指令记录的使用方法

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...

  7. linux下svn命令使用大全

    最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个linux下svn命令使用大全:1.将文件checkout到本地目录 svn checkout path(path是服务器 ...

  8. Linux下rz命令使用的实例详解

    Linux中rz命令和sz命令都可用于文件传输,而rz命令主要用于文件的上传,下面将通过几个实例来给大家详细介绍下Linux下rz命令的用法,一起来学习下吧. rz命令可以批量上传文件,当然也可上传单 ...

  9. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

随机推荐

  1. Linux 复习二

    第二章 一.Linux文件系统 1.基本概念 Linux文件系统为单根的树状结构,根为“/”,文件名大小写敏感,除了“/”都是可用字符,文件名以“.”开始的为隐藏文件. 2.常用文件夹 bin:可执行 ...

  2. 09.C语言:预处理(宏定义)、字节序、地址对齐

    一.预处理 预处理 gcc -E Hello.c -o hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc ...

  3. MVC系统学习2—MVC路由

    在MVC下不是通过对物理文件的映射来实行访问的,而是通过定义后的路由Url来实现访问的.在前一篇讲到我们是在全局文件下进行路由配置. routes.MapRoute(                & ...

  4. Ubuntu16.04再次装机记

    个人的吐槽 整个国庆假期(9天),基本上都在搭建PHP环境中耗费了. 是这样的——来大学报到前,想着大学里用个Dev-C++应该够了,于是把Ubuntu删了,腾出了100G的空间.到了CSU,加了团委 ...

  5. noip模拟赛 abcd

    [问题描述]有4个长度为N的数组a,b,c,d.现在需要你选择N个数构成数组e,数组e满足a[i]≤e[i]≤b[i]以及 并且使得 最大.[输入格式]输入文件名为abcd.in.输入文件共 N+1 ...

  6. 【整理】uclibc,eglibc,glibc之间的区别和联系

    http://www.crifan.com/relation_between_uclibc_glibc_eglibc/ 1.Glibc glibc = GNU C Library 是GNU项(GNU ...

  7. PHP array_keys()

    定义和用法 array_keys() 函数返回包含数组中所有键名的一个新数组. 如果提供了第二个参数,则只返回键值为该值的键名. 如果 strict 参数指定为 true,则 PHP 会使用全等比较 ...

  8. 第3章 ES文档和故障处理

    第3章 ES文档和故障处理 一.ES网络配置表 ES网络配置表是ES的硬件和软件组成的列表.ES网络配置常包括以下项目: 分级 项目 杂项信息 系统名.系统厂商/型号.CPU速率.RAM.存储器.系统 ...

  9. C++之:友元类

    一.文章来由 上一篇写了友元函数,这一次写一个姊妹篇,继续深入探究一下友元类. 二.定义 友元类的全部成员函数都是还有一个类的友元函数.都能够訪问还有一个类中的隐藏信息(包含私有成员和保护成员). 当 ...

  10. STM32跑马灯

    #include "stm32f10x.h" #include "led.h" #include "delay.h" #include &q ...