Linux【2】-管理文件-4-linux文件的合并(paste、join)
一、基本的命令
1.1 paste详解
[root@www ~]# paste [-d] file1 file2
选项与参数:
-d :后面可以接分隔字符。默认是以 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。
范例一:将 /etc/passwd 与 /etc/shadow 同一行贴在一起
[root@www ~]# paste /etc/passwd /etc/shadow
bin:x:1:1:bin:/bin:/sbin/nologin bin:*:14126:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:14126:0:99999:7:::
adm:x:3:4:adm:/var/adm:/sbin/nologin adm:*:14126:0:99999:7:::
# 注意喔!同一行中间是以 [tab] 按键隔开的!
范例二:先将 /etc/group 读出(用 cat),然后与范例一贴上一起!且仅取出前三行
[root@www ~]# cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3
# 这个例子的重点在那个 - 的使用!那玩意儿常常代表 stdin 喔!
例:使用chpasswd批量修改用户密码
[root@localhost ~]# cat name
user1:
user2:
user3:
user4:
[root@localhost ~]# cat passwd
978ebbf1763
23c2626c37b
15dff03fa71
2459043b3ad
[root@localhost ~]# paste name passwd
user1: 978ebbf1763
user2: 23c2626c37b
user3: 15dff03fa71
user4: 2459043b3ad
[root@localhost ~]# paste -d"#" name passwd
user1:#978ebbf1763
user2:#23c2626c37b
user3:#15dff03fa71
user4:#2459043b3ad
注:-d指定分隔符,不加此参数默认为制表符。
行数不同的拼接
对于行数不同的两个文件,paste 采用尽力拼接的原则,对于超出的行,则只能单独展示了
#第一个文件, 有5行
[roc@roclinux ~]$ cat s1.txt
a
b
c
d
e
#第二个文件, 有3行
[roc@roclinux ~]$ cat s2.txt
1
2
3
#拼接s1和s2
[roc@roclinux ~]$ paste s1.txt s2.txt
a 1
b 2
c 3
d
e
#拼接s2和s1, 注意, 参数的顺序对输出是有影响的
[roc@roclinux ~]$ paste s2.txt s1.txt
1 a
2 b
3 c
d
e
三个文件能 paste 么
刚才的例子是 paste 两个文件,那三个文件可以 paste 么?当然可以,看看例子吧: #这是第三个文件, 也有3行
[roc@roclinux ~]$ cat p3.txt
I
II
III
#按p1、p2、p3的顺序拼接
[roc@roclinux ~]$ paste p1.txt p2.txt p3.txt
1 a I
2 b II
3 c III
#按p3、p2、p1的顺序拼接
[roc@roclinux ~]$ paste p3.txt p2.txt p1.txt
I a 1
II b 2
III c 3
paste 好强大,多个文件,照样能够按行拼接。而且会发现,paste 拼接是和文件列表的顺序有关的。
说说 paste 命令的 -s 选项
“示例”胜于雄辩,我们通过例子来解释-s选项的作用:
#这是第一个文件
[roc@roclinux ~]$ cat p1.txt
1
2
3
#这是第二个文件
[roc@roclinux ~]$ cat p2.txt
a
b
c
这是第三个文件
[roc@roclinux ~]$ cat p3.txt
I
II
III
#我们使用了-s选项, 注意观察
[roc@roclinux ~]$ paste -s -d "*" p1.txt p2.txt p3.txt
1*2*3
a*b*c
I*II*III
这下看懂了吧,-s就是以每个文件自身为一个处理单元,将此文件中的所有行以-d选项设定的间隔符拼接成一大行,并输出到标准输出中。
1.2 join
将有相同数据的那一行合并在一起。
$ join [-ti12] file1 file2
-t :分隔符,默认为空格
-i :忽略大小写的差异
-1 :第一个文件所用的比较字段
-2 :第二个文件所用的比较字段
二、讨论
2.2 两个文件合并
一个文件在上,一个文件在下
cat file1 file2 > file3
一个文件在左,一个文件在右
paste file1 file2 > file3
参考文献
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn