Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1274897
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-09-26 20:36:45


有两个文件需要合并,开始写了脚本实现,忽然发现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


阅读(17286) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~