Linux join - paste - split - tr - xargs

join  用于将两个文件中,指定栏位内容相同的行连接起来。

    -a FILENUM:打印指定文件的所有行,包括没有匹配到的行。FILENUM 表示要打印的文件编号,1 表示第一个文件,2 表示第二个文件,1 2 表示两个文件都要打印。
    -e EMPTY:指定在缺少匹配行时要使用的空白字段值。
    -i:忽略大小写进行匹配。
    -t CHAR:指定字段分隔符。
    -1 FIELD:指定第一个文件中用于连接的字段,从 1 开始计数。
    -2 FIELD:指定第二个文件中用于连接的字段,从 1 开始计数。
    -j 指定2个文件里相同的字段,后面接第几个字段

[root@ansible_nfs cs1]# cat test.txt 
1 John
2 Mary
3 Tom
[root@ansible_nfs cs1]# cat test2.txt 
1 M
2 F
4 M
[root@ansible_nfs cs1]# join test.txt test2.txt 
1 John M
2 Mary F

按照第二个字段连接两个文件
[root@ansible_nfs cs1]# join -1 2 -2 2 test.txt test2.txt 
join: test2.txt:2: is not sorted: 2 F

输出join处理后的第一个文件的第2个字段和第二个文件的第1,2个字段
[root@ansible_nfs cs1]# join -o 1.2 2.1 2.2 test.txt test2.txt 
John 1 M
Mary 2 F

按照第一个字段连接两个文件
[root@ansible_nfs cs1]# join -1 1 -2 1 test.txt test2.txt 
1 John M
2 Mary F

打印第一个文件中所有的行
打印第二个文件中所有的行
[root@ansible_nfs cs1]# join -a 1 test.txt test2.txt 
1 John M
2 Mary F
3 Tom
[root@ansible_nfs cs1]# join -a 2 test.txt test2.txt 
1 John M
2 Mary F
4 M
忽略大小写进行匹配
[root@ansible_nfs sc2]# join -i -1 1 -2 1 file1.txt file2.txt
1 John M
2 Mary F

忽略不匹配的行
[root@ansible_nfs sc2]# join -a 1  file1.txt file2.txt 
1 John M
2 Mary F
3 Tom
[root@ansible_nfs sc2]# join -a 2  file1.txt file2.txt 
1 John M
2 Mary F
4 M
[root@ansible_nfs 7-1]# cat grade.txt 
name    chinese    math    English
cali	80        91        82
tom 	90 	  80  	    99
lucy 	99 	  70  	    75
jack  	60 	  89 	    99
[root@ansible_nfs 7-1]# cat grade2.txt 
name    chinese    math    English
cali	80        91        82
tom 	90 	  80  	    99
lucy 	99 	  70  	    75
jack  	60 	  89 	    99
[root@ansible_nfs 7-1]# join -j 2 grade.txt  grade2.txt 
chinese name math English name math English
80 cali 91 82 cali 91 82
90 tom 80 99 tom 80 99
99 lucy 70 75 lucy 70 75
60 jack 89 99 jack 89 99

paste 会把每个文件以列对列的方式,一列列合并

[root@ansible_nfs 7-1]# cat grade.txt grade2.txt 
name    chinese    math    English
cali	80        91        82
tom 	90 	  	  80  	    99
lucy 	99 	  	  70  	    75
jack  	60 	  	  89 	    99
name    chinese    math    English
cali	80        91        82
tom 	90 	  	  80  	    99
lucy 	99 	  	  70  	    75
jack  	60 	  	  89 	    99
[root@ansible_nfs 7-1]# paste grade.txt grade2.txt 
name    chinese    math    English	name    chinese    math    English
cali	80         91        82		cali	80    	   91        82
tom 	90 	  	   80  	    99		tom 	90 	  	   80  	     99
lucy 	99 	  	   70  	    75		lucy 	99 	  	   70  	     75
jack  	60 	  	   89 	    99		jack  	60 	  	   89 	     99
[root@ansible_nfs 7-1]# join grade.txt grade2.txt 
name chinese math English chinese math English
cali 80 91 82 80 91 82
tom  90 80 99 90 80 99
lucy 99 70 75 99 70 75
jack 60 89 99 60 89 99

split 拆分的命令,将一个文件分割成数个

    1.根据大小(字节)
        -b 根据字节来截取
        -C 根据字节来截取,(尽量考虑整行的输出)
        -a 指定生成的文件名后缀的长度,默认为2
    2.行
        -5
        -d 使用数字作为输出文件名的后缀。
        -l 按行分割

[root@ansible_nfs cjh3]# split -5 passwd
[root@ansible_nfs cjh3]# ls
passwd  xaa  xab  xac  xad  xae  xaf
[root@ansible_nfs cjh3]# cat xaa
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@ansible_nfs cjh3]# split -5 passwd sc_
[root@ansible_nfs cjh3]# ls
passwd  sc_aa  sc_ab  sc_ac  sc_ad  sc_ae  sc_af

[root@ansible_nfs cjh3]# split -l 10 passwd -d -a 3 sanchuang_
[root@ansible_nfs cjh3]# ls
passwd  sanchuang_000  sanchuang_001  sanchuang_002
[root@ansible_nfs cjh3]# cat sanchuang_001
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
chenyamin:x:1000:1000::/home/chenyamin:/bin/bash

[root@ansible_nfs cjh3]# split -b 10 passwd -d cs_
[root@ansible_nfs cjh3]# ls
cs_00  cs_06  cs_12  cs_18  cs_24  cs_30  cs_36  cs_42  cs_48  cs_54  cs_60  cs_66  cs_72  cs_78  cs_84  cs_9000  cs_9006  cs_9012  cs_9018  cs_9024  cs_9030  cs_9036  cs_9042  cs_9048  cs_9054  passwd
cs_01  cs_07  cs_13  cs_19  cs_25  cs_31  cs_37  cs_43  cs_49  cs_55  cs_61  cs_67  cs_73  cs_79  cs_85  cs_9001  cs_9007  cs_9013  cs_9019  cs_9025  cs_9031  cs_9037  cs_9043  cs_9049  cs_9055
cs_02  cs_08  cs_14  cs_20  cs_26  cs_32  cs_38  cs_44  cs_50  cs_56  cs_62  cs_68  cs_74  cs_80  cs_86  cs_9002  cs_9008  cs_9014  cs_9020  cs_9026  cs_9032  cs_9038  cs_9044  cs_9050  cs_9056
cs_03  cs_09  cs_15  cs_21  cs_27  cs_33  cs_39  cs_45  cs_51  cs_57  cs_63  cs_69  cs_75  cs_81  cs_87  cs_9003  cs_9009  cs_9015  cs_9021  cs_9027  cs_9033  cs_9039  cs_9045  cs_9051  cs_9057
cs_04  cs_10  cs_16  cs_22  cs_28  cs_34  cs_40  cs_46  cs_52  cs_58  cs_64  cs_70  cs_76  cs_82  cs_88  cs_9004  cs_9010  cs_9016  cs_9022  cs_9028  cs_9034  cs_9040  cs_9046  cs_9052  cs_9058
cs_05  cs_11  cs_17  cs_23  cs_29  cs_35  cs_41  cs_47  cs_53  cs_59  cs_65  cs_71  cs_77  cs_83  cs_89  cs_9005  cs_9011  cs_9017  cs_9023  cs_9029  cs_9035  cs_9041  cs_9047  cs_9053  cs_9059

合并
[root@ansible_nfs cjh3]# cat cs_* >cs_passwd
[root@ansible_nfs cjh3]# diff cs_passwd passwd
[root@ansible_nfs cjh3]# echo $?
0
[root@ansible_nfs cjh3]# md5sum passwd
e72d4e878d989d854a73c45267b39bcf  passwd
[root@ansible_nfs cjh3]# md5sum cs_passwd 
e72d4e878d989d854a73c45267b39bcf  cs_passwd

tr 字符串转换的命令

 tr - translate or delete characters  实现字符的转换和删除功能
    1.转换
    2.删除
        -d 删除功能 delete
        -s 压缩连续的字符串为一个字符串

将set2中的字符替换set1中同一位置的字符

# 1.替换
[root@sc read]# echo 11122333445566 |tr 123 abc
aaabbccc445566

[root@sc read]# echo 1112233344556611234 |tr 123 abc
aaabbccc445566aabc4

# 小写字母替换成大写字母
[root@sc read]# cat name.txt |tr [a-z] [A-Z]
CALI 12345A
ROSE 123456
JACK 11122A
QIQI 123459
HAN  1298AB
WIE  12IF10
YAO  12HU1U
YIY  1IGI13

[root@sc read]# cat name.txt |tr 123 abc
cali abc45a
rose abc456
jack aaabba
qiqi abc459
han  ab98ab
wie  abifa0
yao  abhuau
yiy  aigiac

[root@sc read]# tr 123 abc name.txt
tr: 额外的操作数 "name.txt"
Try 'tr --help' for more information.

[root@sc read]# tr 123 abc <  name.txt
cali abc45a
rose abc456
jack aaabba
qiqi abc459
han  ab98ab
wie  abifa0
yao  abhuau
yiy  aigiac

# 压缩
[root@ansible_nfs 7-3]# echo 111111122222222222333333333411234|tr -s 123
12341234

[root@ansible_nfs 7-1]# df |tr -s " "|cut -d " " -f 1,3
文件系统 已用
devtmpfs 0
tmpfs 0
tmpfs 9736
tmpfs 0
/dev/mapper/centos-root 6302264
/dev/sda1 194028
tmpfs 0

[root@sc read]# w
 11:31:19 up  1:49,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      10:14    1:16m  0.00s  0.00s -bash
root     pts/0    192.168.102.1    09:42    7.00s  0.05s  0.00s w

[root@sc read]# w|tr -s " " 	# 将连续的空格压缩成一个空格
 11:31:27 up 1:49, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10:14 1:16m 0.00s 0.00s -bash
root pts/0 192.168.102.1 09:42 7.00s 0.05s 0.00s w

[root@sc read]# echo 11111111112222222222333333333|tr -s 123
123
[root@sc read]# echo 111111111122222222223333333331234|tr -s 123
1231234

# 先替换再压缩
[root@sc read]# echo 111111111122222222223333333331234|tr -s 123 abc
abcabc4


[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt 
91
80
70
89
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt |xargs
91 80 70 89
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt |xargs|tr " " "+"
91+80+70+89
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt |xargs|tr " " "+"|bc
330

# 2.删除
[root@ansible_nfs 7-1]# ip a|awk '/ens33$/ {print $2}'|tr -d "/24"
19.168.10.138

[root@sc read]# echo 111222334455|tr -d 345
111222

[root@sc read]# tr -d [0-9] < /etc/hosts
...   localhost localhost.localdomain localhost localhost.localdomain
::         localhost localhost.localdomain localhost localhost.localdomain

# 统计/etc/passwd/中sbin的个数
[root@sc read]# cat /etc/passwd |grep sbin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
apache:x:48:48:Apache:/opt/rh/httpd24/root/usr/share/httpd:/sbin/nologin
nginx:x:996:993:Nginx web server:/var/opt/rh/rh-nginx116/lib/nginx:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin

[root@sc read]# cat /etc/passwd |grep sbin|wc -l
23

[root@sc read]# cat /etc/passwd |grep -o sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin

[root@sc read]# cat /etc/passwd |grep -o sbin|wc -l
26

[root@sc read]# cat /etc/passwd |tr  ":" "\n"|grep sbin
/sbin/nologin
/sbin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin
/sbin
/sbin/shutdown
/sbin
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin

[root@sc read]# cat /etc/passwd |tr  ":" "\n"|grep sbin|wc -l
26

案例:tr命令操作

[root@sc read]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  898M     0  898M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.8M  900M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  7.5G  9.6G   45% /
/dev/sda1               xfs      1014M  190M  825M   19% /boot
overlay                 overlay    17G  7.5G  9.6G   45% /var/lib/docker/overlay2/4bdbe233a30f68ed77dc7341a0998fd70e7eec51418875a9681eefe31a7802ff/merged
overlay                 overlay    17G  7.5G  9.6G   45% /var/lib/docker/overlay2/f205459c510139da6cff5baf2982fbf0aecd138ceff8605d323d9df0cec70154/merged
overlay                 overlay    17G  7.5G  9.6G   45% /var/lib/docker/overlay2/86a2fa2b3e8d2b656e91d2ab2078f601d30590ead3bf90ee8c59a3f1eafa0553/merged
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0

# 压缩连续的空格
[root@sc read]# df -Th|tr -s " "
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 898M 0 898M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.8M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 7.5G 9.6G 45% /
/dev/sda1 xfs 1014M 190M 825M 19% /boot
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/4bdbe233a30f68ed77dc7341a0998fd70e7eec51418875a9681eefe31a7802ff/merged
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/f205459c510139da6cff5baf2982fbf0aecd138ceff8605d323d9df0cec70154/merged
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/86a2fa2b3e8d2b656e91d2ab2078f601d30590ead3bf90ee8c59a3f1eafa0553/merged
tmpfs tmpfs 182M 0 182M 0% /run/user/0

# 删除%
[root@sc read]# df -Th|tr -d "%"
文件系统                类型      容量  已用  可用 已用 挂载点
devtmpfs                devtmpfs  898M     0  898M    0 /dev
tmpfs                   tmpfs     910M     0  910M    0 /dev/shm
tmpfs                   tmpfs     910M  9.8M  900M    2 /run
tmpfs                   tmpfs     910M     0  910M    0 /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  7.5G  9.6G   45 /
/dev/sda1               xfs      1014M  190M  825M   19 /boot
overlay                 overlay    17G  7.5G  9.6G   45 /var/lib/docker/overlay2/4bdbe233a30f68ed77dc7341a0998fd70e7eec51418875a9681eefe31a7802ff/merged
overlay                 overlay    17G  7.5G  9.6G   45 /var/lib/docker/overlay2/f205459c510139da6cff5baf2982fbf0aecd138ceff8605d323d9df0cec70154/merged
overlay                 overlay    17G  7.5G  9.6G   45 /var/lib/docker/overlay2/86a2fa2b3e8d2b656e91d2ab2078f601d30590ead3bf90ee8c59a3f1eafa0553/merged
tmpfs                   tmpfs     182M     0  182M    0 /run/user/0

[root@sc read]# df -Th|tr -d "%"|grep "/$"|awk '{print $6}'
45

# 将/etc/hosts 小写字母和数字删除
[root@sc read]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

[root@sc read]# tr -d [0-9][a-z]  </etc/hosts
...    .  .
::          .  .

# 将/etc/passwd的小写字母替换成大写字母
[root@sc read]# tr [a-z] [A-Z]  </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
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN
FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:192:192:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
DBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGIN
POLKITD:X:999:998:USER FOR POLKITD:/:/SBIN/NOLOGIN
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
POSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGIN
CHRONY:X:998:996::/VAR/LIB/CHRONY:/SBIN/NOLOGIN
CHENYAMIN:X:1000:1000::/HOME/CHENYAMIN:/BIN/BASH
ZABBIX:X:997:995:ZABBIX MONITORING SYSTEM:/VAR/LIB/ZABBIX:/SBIN/NOLOGIN
APACHE:X:48:48:APACHE:/OPT/RH/HTTPD24/ROOT/USR/SHARE/HTTPD:/SBIN/NOLOGIN
NGINX:X:996:993:NGINX WEB SERVER:/VAR/OPT/RH/RH-NGINX116/LIB/NGINX:/SBIN/NOLOGIN
MYSQL:X:27:27:MARIADB SERVER:/VAR/LIB/MYSQL:/SBIN/NOLOGIN
MYSQLROUTER:X:995:992:MYSQL ROUTER:/VAR/LIB/MYSQLROUTER:/BIN/FALSE
JENKINS:X:994:991:JENKINS AUTOMATION SERVER:/VAR/LIB/JENKINS:/BIN/BASH
NAMED:X:25:25:NAMED:/VAR/NAMED:/SBIN/NOLOGIN
SC:X:1001:1001::/HOME/SC:/BIN/BASH

xargs 是一个传递参数的命令,将前面命令的输出送给后面的命令做参数使用

[root@sc read]# echo feng.txt |ls -l
总用量 28
-rw-r--r-- 1 root root 258 7月  26 00:24 create_user.sh
-rw-r--r-- 1 root root  23 7月  26 00:49 feng.txt
-rw-r--r-- 1 root root 282 7月  26 01:22 menu.sh
-rw-r--r-- 1 root root 268 7月  26 00:54 qi.sh
-rw-r--r-- 1 root root 247 7月  25 23:53 read_.sh
-rw-r--r-- 1 root root  10 7月  26 01:15 t1.txt
-rw-r--r-- 1 root root 369 7月  26 01:01 user_passwd.sh

[root@sc read]# echo feng.txt |xargs ls -l
-rw-r--r-- 1 root root 23 7月  26 00:49 feng.txt

[root@ansible_nfs 7-3]# cat facebook.txt 
google    110    5000
baidu    100    5000
guge    50    3000
sohu    100    4500

[root@ansible_nfs 7-3]# cat facebook.txt |xargs
google 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩未零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值