转自: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. 腾讯云,搭建Git服务器

    下载安装 git 任务时间:5min ~ 10min Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统为环境,搭建 ...

  2. linux设置系统时间与各种阻塞

    前阵子做了一个P2P的通信系统,发现开机的时候和中间运行的时候会莫名报错,这个问题找了好久,后来从日志中看出来,所有节点上阻塞的操作同时超时. 而在超时左右,有新节点自动加入系统. 在新节点加入系统的 ...

  3. 【01】CSS制作的图形

    [01]CSS制作的图形   绘制五角星:   通过border绘制三角形.然后通过transfrom来旋转35度. 绘制对称的图形,最后绘制顶部的三角形即可.   元素本身,加上:before和:a ...

  4. 团队开发git使用各种问题

    参考:https://www.cnblogs.com/schaepher/p/4933873.html 问题-3:保持github上项目干净,对于在不同机器上运行会不同的文件不予维护(如.idea/w ...

  5. sdibt 1251 进化树问题

    /* 三个点的话 A--D--B | C dis(AD)=(AB+AC-BC)/2; 拓展到到n个点 每次去叶子节点,先去掉与A相连长度最小的. 将他们的长度加起来. */ #include<s ...

  6. 【ZJOI2017 Round2练习&BZOJ4827】D1T3 gift(FFT)

    题意: 思路:可以看出题目所要最小化的是这样一个形式: 拆出每一项之后发现会变化的项只有sigma a[i]*b[i+t]与c^2,c*(a[i]-b[i]) c可以在外层枚举,剩下的只有sigma ...

  7. 洛谷—— P1122 最大子树和

    https://www.luogu.org/problem/show?pid=1122 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课 ...

  8. PWA 基础学习

    1.PWA 是什么? PWA 是 Progressive Web App 的缩写,从字面翻译过来就是 渐进式 Web App. 渐进式翻译过来就是慢慢的,不是一蹴而就的.这里的指的是 Wab App ...

  9. ojdbc.jar

    Oracle的jdbc驱动是ojdbc.jar 文件,那么mysql的jdbc驱动是什么呢? 匿名 | 浏览 689 次 发布于2015-06-07 02:06   最佳答案   MySQL的JDBC ...

  10. 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射

    使用Code First建模自引用关系笔记   原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...