工作中如何让自己变得强大?向周围人学习!
同事求助Linux下俩文件相同部分做筛选,数据文件很大,如何操作。终于发现牛人,我就顺道偷师学艺。
相关链接:
Linux 命令整理 —— 基本操作
Linux 命令整理 —— 用户管理
一、一般关联
比方说有两个文件:
写道
$ cat 1
a 100
b 200
c 300
d 500
$ cat 2
c 2012-03-01
d 2012-05-01
a 2012-01-01
a 100
b 200
c 300
d 500
$ cat 2
c 2012-03-01
d 2012-05-01
a 2012-01-01
我想要两个文件中相互匹配的部分,也就是a、c、d部分。
写道
$ join 1 2
c 300 2012-03-01
d 500 2012-05-01
c 300 2012-03-01
d 500 2012-05-01
但实际上只有c、d两部分,因为要使用JOIN,带关联文件中首列必须先做好排序。具体看下面的参数说明。
JOIN 参数
$ join --help
Usage: join [OPTION]... FILE1 FILE2
For each pair of input lines with identical join fields, write a line to
standard output. The default join field is the first, delimited
by whitespace. When FILE1 or FILE2 (not both) is -, read standard input.
-a FILENUM print unpairable lines coming from file FILENUM, where
FILENUM is 1 or 2, corresponding to FILE1 or FILE2
-e EMPTY replace missing input fields with EMPTY
-i, --ignore-case ignore differences in case when comparing fields
-j FIELD equivalent to `-1 FIELD -2 FIELD'
-o FORMAT obey FORMAT while constructing output line
-t CHAR use CHAR as input and output field separator
-v FILENUM like -a FILENUM, but suppress joined output lines
-1 FIELD join on this FIELD of file 1
-2 FIELD join on this FIELD of file 2
--help 显示此帮助信息并离开
--version 显示版本信息并离开
Unless -t CHAR is given, leading blanks separate fields and are ignored,
else fields are separated by CHAR. Any FIELD is a field number counted
from 1. FORMAT is one or more comma or blank separated specifications,
each being `FILENUM.FIELD' or `0'. Default FORMAT outputs the join field,
the remaining fields from FILE1, the remaining fields from FILE2, all
separated by CHAR.
Important: FILE1 and FILE2 must be sorted on the join fields.
Report bugs to <bug-coreutils@gnu.org>.
Usage: join [OPTION]... FILE1 FILE2
For each pair of input lines with identical join fields, write a line to
standard output. The default join field is the first, delimited
by whitespace. When FILE1 or FILE2 (not both) is -, read standard input.
-a FILENUM print unpairable lines coming from file FILENUM, where
FILENUM is 1 or 2, corresponding to FILE1 or FILE2
-e EMPTY replace missing input fields with EMPTY
-i, --ignore-case ignore differences in case when comparing fields
-j FIELD equivalent to `-1 FIELD -2 FIELD'
-o FORMAT obey FORMAT while constructing output line
-t CHAR use CHAR as input and output field separator
-v FILENUM like -a FILENUM, but suppress joined output lines
-1 FIELD join on this FIELD of file 1
-2 FIELD join on this FIELD of file 2
--help 显示此帮助信息并离开
--version 显示版本信息并离开
Unless -t CHAR is given, leading blanks separate fields and are ignored,
else fields are separated by CHAR. Any FIELD is a field number counted
from 1. FORMAT is one or more comma or blank separated specifications,
each being `FILENUM.FIELD' or `0'. Default FORMAT outputs the join field,
the remaining fields from FILE1, the remaining fields from FILE2, all
separated by CHAR.
Important: FILE1 and FILE2 must be sorted on the join fields.
Report bugs to <bug-coreutils@gnu.org>.
原来使用JOIN,类似于Database中的join一样,默认首列作为主外键自动关联。
JOIN还有很多参数,自己去领悟了。
二、特殊分隔符
“空格”是默认分隔符,如果要使用特定符号作为分隔符,譬如“,”,可以用“-t”参数:
写道
$ join 1 2 -t ,
c,300,2012-03-01
d,500,2012-05-01
c,300,2012-03-01
d,500,2012-05-01
三、特定字段关联
如果需要关联的字段不是首列,可以使用“-j”参数,以及“-1”,“-2”支出前后两个文件的具体列号:
写道
cat 1
a,100
b,200
c,300
d,500
$ cat 3
f,c
m,d
$ join 1 3 -t , -1 1 -2 2
c,300,f
d,500,m
a,100
b,200
c,300
d,500
$ cat 3
f,c
m,d
$ join 1 3 -t , -1 1 -2 2
c,300,f
d,500,m
文件3的关联字段是第二列,所以有了上面的这种写法。
四,显示特定列
如果我只需要特定列输出,不关心文件原有部分,可以用“-o”参数。
写道
$ join 1 2 -t , -o 1.1,1.2,2.2
c,300,2012-03-01
d,500,2012-05-01
c,300,2012-03-01
d,500,2012-05-01
注意待显示列,用“,”分割。
还有几个参数,请大家自悟吧!
目前这些,已经够用了!
相关链接:
Linux 命令整理 —— 基本操作
Linux 命令整理 —— 用户管理
相关推荐
Linux笔记——命令:Sort,uniq,join,cut,paste,split Linux笔记——shell基础:变量&本地变量&位置变量&特定变量参数 Linux笔记——条件测试test Linux笔记——控制流 Linux笔记——shell补充:参数传递&函数等 Linux...
3. **Linux程序设计入门——文件操作** - 文件打开与关闭 - 文件读写 - 文件定位 - 文件属性设置 4. **Linux程序设计入门——时间概念** - 时间的获取 - 时间的转换 - 定时器的应用 5. **Linux程序设计入门...
Linux 下 C 语言编程——线程 Linux 下的线程是一个复杂的问题,但是在这里,我们将简单的介绍线程的创建和基本的使用。线程的高级使用,如线程的属性、线程的互斥、线程的同步等问题,可以参考后面给出的资料。 ...
在Linux环境下进行C编程是一种非常常见且强大的技术实践。...这个“Linux下C编程实战——源代码”压缩包可能包含了这些概念的实例代码,供学习者参考和练习。记得动手实践,结合源代码加深理解和应用。
Linux提供了`pthread_create()`和`pthread_join()`等线程函数,用于创建和管理线程。多线程可以减少进程间的通信开销,提高程序的执行效率。但是,线程间的共享数据和同步问题需要谨慎处理,避免竞态条件和死锁。 ...
这部分详细介绍UNIX和LINUX系统的常用命令,如grep、sed、awk、find、cut等,以及如何结合使用它们进行数据过滤、文本处理和文件操作。同时,还会讲解输入/输出重定向、管道和进程控制,使读者能够灵活地操纵数据流...
#### 三、Linux程序设计入门——文件操作 - **文件打开与关闭**:使用`open`和`close`系统调用来打开和关闭文件。 - **读写操作**:使用`read`和`write`系统调用来读取和写入文件数据。 - **其他文件操作**:如`...
首先,线程和进程是操作系统中两种基本的执行单元。线程是进程内部的执行流,是调度的基本单位,每个进程可拥有多个线程。进程之间是独立的,拥有各自的内存空间,而线程共享进程的内存,这使得线程间通信更为便捷。...
管道命令如`wc`、`cut`、`grep`、`sort`、`uniq`、`tee`、`tr`、`join`、`paste`、`split`和`xargs`常用于数据处理和文件操作。此外,`umask`设置默认权限,`chattr`和`lsattr`管理特殊权限。 软件安装通常有包管理...
### Linux操作系统下C语言编程入门知识点 #### 一、Linux操作系统与C语言编程的重要性 - **Linux操作系统**:作为开源且免费的操作系统,Linux凭借其稳定性、安全性以及强大的社区支持,已经成为服务器领域的首选...
### 数据文件处理命令小结 #### 一、转换和删除重复命令——`tr` `tr` 命令主要用于字符转换或删除重复字符。它在Linux运维中非常实用,能够帮助用户快速修改文本文件中的字符。 ##### 命令格式 ``` tr [option] ...
标题中的"jdk1.7linux.rar"表明这是一个与Java Development Kit (JDK) 版本1.7在Linux操作系统上的版本相关的压缩文件。通常,JDK是Java编程语言的软件开发工具包,它包含了编译器、调试器、文档和其他必要的工具,...
《Linux内核API详解——基于Linux 2.6.22.6》 在Linux操作系统的世界里,Linux内核API(Application Programming Interface)是开发者与操作系统内核进行交互的重要桥梁。Linux 2.6.22.6是历史悠久的一个内核版本,...
### Linux下C语言编程——线程操作 #### 前言:Linux下线程的创建与基础使用 在Linux环境中,线程作为一种重要的并发机制,为开发者提供了在单个进程中执行多个任务的能力。相较于进程,线程之间的切换成本更低,...
然而,如果你需要更高级的搜索功能,比如查找特定类型的文件或者满足特定条件的文件,你可以使用命令行工具——CMD(命令提示符)或PowerShell。在CMD中,`dir /s /b`命令可以列出指定文件夹及其子文件夹下的所有...
操作系统实验报告——PV操作在读者/写者问题中的应用 实验目标主要集中在理解和掌握操作系统中的同步与互斥算法,特别是如何在Linux环境下利用同步对象来实现进程间的协作。实验要求参与者学习并理解读者/写者模型...
在Linux环境下,你可以使用`tar -zxvf jdk-8u60-linux-x64.tar.gz`命令来解压文件,然后设置环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,以便系统能够找到并正确运行JDK。安装完成后,你便可以开始使用JDK 8进行Java...
首先,让我们关注CHM文件——"Linux常用C函数.chm"。CHM是一种由微软开发的帮助文档格式,它将HTML页面压缩到一个单一的文件中,便于离线浏览和快速检索。这个文件可能包含了大量的C函数详解,如标准I/O库的`printf`...