zoukankan      html  css  js  c++  java
  • 【Linux】字符转换命令join

      join 看字面上的意义 (加入/参加) 就可以知道,他是在处理两个文件之间的数据,而且,主要是在处理『两个文件当中,有 "相同数据" 的那一行,才将他加在一起』的意思。我们利用底下的简单例子来说明:

    [root@www ~]# join [-ti12] file1 file2
    选项与参数:
    -t  :join 默认以空格符分隔数据,并且比对『第一个字段』的数据,
          如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个!
    -i  :忽略大小写的差异;
    -1  :这个是数字的 1 ,代表『第一个文件要用那个字段来分析』的意思;
    -2  :代表『第二个文件要用那个字段来分析』的意思。
    
    范例一:用 root 的身份,将 /etc/passwd 与 /etc/shadow 相关数据整合成一栏
    [root@www ~]# head -n 3 /etc/passwd /etc/shadow
    ==> /etc/passwd <==
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
    ==> /etc/shadow <==
    root:$1$/3AQpE5e$y9A/D0bh6rElAs:14120:0:99999:7:::
    bin:*:14126:0:99999:7:::
    daemon:*:14126:0:99999:7:::
    # 由输出的数据可以发现这两个文件的最左边字段都是账号!且以 : 分隔
    
    [root@www ~]# join -t ':' /etc/passwd /etc/shadow
    root:x:0:0:root:/root:/bin/bash:$1$/3AQpE5e$y9A/D0bh6rElAs:14120:0:99999:7:::
    bin:x:1:1:bin:/bin:/sbin/nologin:*:14126:0:99999:7:::
    daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:14126:0:99999:7:::
    # 透过上面这个动作,我们可以将两个文件第一字段相同者整合成一行!
    # 第二个文件的相同字段并不会显示(因为已经在第一行了嘛!)
    
    范例二:我们知道 /etc/passwd 第四个字段是 GID ,那个 GID 记录在 
            /etc/group 当中的第三个字段,请问如何将两个文件整合?
    [root@www ~]# head -n 3 /etc/passwd /etc/group
    ==> /etc/passwd <==
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
    ==> /etc/group <==
    root:x:0:root
    bin:x:1:root,bin,daemon
    daemon:x:2:root,bin,daemon
    # 从上面可以看到,确实有相同的部分喔!赶紧来整合一下!
    
    [root@www ~]# join -t ':' -1 4 /etc/passwd -2 3 /etc/group
    0:root:x:0:root:/root:/bin/bash:root:x:root
    1:bin:x:1:bin:/bin:/sbin/nologin:bin:x:root,bin,daemon
    2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x:root,bin,daemon
    # 同样的,相同的字段部分被移动到最前面了!所以第二个文件的内容就没再显示。
    # 请读者们配合上述显示两个文件的实际内容来比对!

      这个 join 在处理两个相关的数据文件时,就真的是很有帮助的啦! 例如上面的案例当中,我的 /etc/passwd, /etc/shadow, /etc/group 都是有相关性的, 其中 /etc/passwd, /etc/shadow 以账号为相关性,至于 /etc/passwd, /etc/group 则以所谓的 GID (账号的数字定义) 来作为他的相关性。根据这个相关性, 我们可以将有关系的数据放置在一起!这在处理数据可是相当有帮助的! 

      此外,需要特别注意的是,在使用 join 之前,你所需要处理的文件应该要事先经过排序 (sort) 处理! 否则有些比对的项目会被略过呢!特别注意了!

      参考资料:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php#join

  • 相关阅读:
    铬族元素
    Linux下安装虚拟环境
    Flask之路由系统
    Flask之CSRF
    【原创】关于Azure Storage Simulator 不能启动的问题
    今天终于搞清楚了正则表达式
    模型权重的保存与加载 回调函数的使用
    卷积神经网络结构
    滑动窗口与R-CNN
    模型权重记录与恢复
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3725567.html
Copyright © 2011-2022 走看看